Add support for coercing valid URLs

This makes it possible to coerce a URL string into a `java.net.URL`.

The decision to use a `URL` as opposed to a `URI` comes from the fact we want to ensure there is a protocol in the URL string.

We can add support for both via `uri` and `url` functions if anyone is interested in the differences between the underlying classes we coerce to.