Services based on URLs

A big rewrite of services to remove a lot of different accessors (`host`, `hosts`, etc.) while preserving backwards compatibility.
If you clean up the API then you can replace this with something like replace_urlparts(hostname=host, port=port)