When a command returned a large amount of data, it was blocking on the stderr callback when `[fileHandle availableData]` was called. From what I can tell, this is because stderr was being called with a zero-length string.
This was fixed when `[fileHandle availableData]` was moved to run inside the NSTask thread (instead of on the main thread). It now returns a zero-length string rather than blocking forever.
An unresolved question is why stderr is being called with zero-length strings.