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.
Ouch. It just occurred to me that this won't work if `ElementType!IRange` is `const` or `immutable`. So, at minimum, this should be changed to be `Unqual!(ElementType!IRange)`, though that wouldn't work with classes - which would need `Rebindable` - and even that wouldn't be enough if it were a `struct` with a postblit (though the language simply doesn't provide a way to copy `const` or `immutable` structs with postblits right now, so we'd just be stuck on that point). Normally, the problem is solved by simply returning `input.front` rather than saving it, but because `input.front` can throw, that's not an option. So, I'd suggest something like

    static if(ElementType!IRange == class)
        Rebindable!(ElementType!IRange) frontElement;
    else
        Unqual!(ElementType!IRange) frontElement;

along with some tests for those cases of course.