Allow the apiserver to support raw URLs

Supports handling paths like "/foo/bar%2Fbaz", which Go 1.X does not correctly handle according to RFC
(https://code.google.com/p/go/issues/detail?id=3659). A concrete case for this is REST resources whose ID contains slashes which could include Docker repository/registry names, URLs, and path segments.

Broken into three pieces for easier review.
Yeah it's "smart"