add url() support

getting service URLs from env is a frequnt use-case. this makes it
easier and safer

- easier: fully parsed URLs
- easier: one env var to manage
- safer: validates for something sane, and avoids default ports
Why do you require a port?