Apply the suggestions from Ramnivas.

The changes here are mostly driven by the desire to have UriInfo (and
derivatives) be immutable (no setters). In addition, UriBasedServiceInfo
and derivatives, which use UriInfo, currently have no way of using
subclassed UriInfo objects.

The specifics of this change are:
1. Introduce a UriInfoFactory interface. The StandardUriInfoFactory
   implementation provides the default.
2. Remove URI parsing logic from UriInfo constructors. This allows the
   factory to handle parsing. This also enables a subclassed
   UriBasedServiceInfo class to define it's own UriInfoFactory for
   custom URIs with specialized parsing requirements.