Provides a value object representing a URI for HTTP requests.
Instances of this class are considered immutable; all methods that
might change state are implemented such that they retain the internal
state of the current instance and return a new instance that contains the
changed state.