Services based on URLs

A big rewrite of services to remove a lot of different accessors (`host`, `hosts`, etc.) while preserving backwards compatibility.
I hate this API, can we change it to replace_part(url, hostname=hostname, port=port) ?