handle: A Range that handles an Exception

When a Exception occurs inside a range chaining the whole chain dies usually. The Handle range fixes that, as it catches a defined exception and calls an user defined handler on it.
Ah, I missed your comment, because github ate it after you changed the code. Yes. that makes the range somewhat eager, but without that, it means that `front` can throw because the range is empty, which is very ugly IMHO.  if `front` can throw, it will force folks to catch an `Exception` just because the last element in the underlying range threw instead of just letting the `handler` handle all of the exceptions. Also, it arguably violates how ranges are supposed to work when `front` throws when `empty` was `false` because the range is empty, and arguably it means that `empty` is lying, because it doesn't really indicate whether the range is empty or not. It just indicates when the range is _known_ to be empty, not whether it's actually empty.

If someone doesn't like the eagerness, they can always iterate manually. The primary benefit to `handle` is to make it possible to use `foreach` over the whole range when the range being iterated over throws an exception while iterating. And in that case, the eagerness isn't a problem at all. The whole range was going to be iterated over anyway.