Before this commit, UriComponentsBuilder did not handle opaque URIs at all. After this commit it does. Support is introduced by making UriComponents an abstract base class, and having two concrete subclasses: HierarchicalUriComponents and OpaqueUriComponents. The former is more or less the same as the old UriComponents class. Issue: SPR-9798