#2401: fix error handling in Filters by using a new recover method on Iteratee

This is a fix for #2401: Filters can now propagate and handle errors correctly. This is done by using new methods `recover`, `recoverM`, and `recoverWith` that I added to the `Iteratee` class. 

I added a number of unit tests for the various `recover` methods and several integration tests that check that error handling now works in Filters. The latter tests were failing before this patch and our now passing.