Fixed plenty of issues which could cause a deadlock

Mainly through channels that have not been closed.
Increased the engine's parallel execution as well - previously it used a hot
loop over channels. Current implementation should save some energy.
Reader now uses a mutex, which is a simpler way to sync access.

ReadChannel datastructure was optimized to reduce heap usage
Fixed handling of cancellation, which could hang previously.

It's vital that the gather process doesn't check when consuming files,
it has to keep going forever.
Major design change to have a common base type which deals with shared implementations.

It's not yet working, but probably just due to a minor issue
Base class and aborting of long reads works now.

Fixed another possible issue in aggregration
Finally, --verify is implemented and working

It took me nearly an hour to figure out that the Before callback gets
more arguments than the actual action, for some reason.

See my note at https://github.com/codegangsta/cli/commit/2535376782cb8bf244a767afd45250ce7fc8b326