Enumerator.onDoneEnumerating invoked for failures

Typically, Enumerator.onDoneEnumerating is used to clean up resources.
Hence it can be considered the equivalent of a finally block.  However,
it's not implemented that way, it only implements if the iteratee
successfully consumes all its input.

This results in resource leaks, for example, `Enumerator.fromStream` was
using it to close passed in input streams.

Now it's implemented such that whether the iteratee successfully
consumes the input, or fails, the callback will be executed.

Fixes #1912