Inspect, parse, encode and debug URLs

Inspect, parse, encode and debug URLs

A URL is not one undifferentiated string. Scheme, host, port, path, query and fragment have separate roles, and reserved characters should not be encoded blindly.