Add UnescapeError exception

Raise UnescapeError exception instead of ArgumentError
when url has malformed escape sequence.

Currently there is no way to rescue malformed urls and take some custom actions because ArgumentError is too general.

Small refactoring as a bonus.