(PUP-3644) Copy v1 to v3

This commit simply makes a copy of the v1 http handler code
to a new file called v3.rb; no code changes yet other than
changing the class name from `V1` to `V3`.  Doing this as
an isolated commit so that subsequent changes to the v3.rb
code will have a more meaningful diff in the VCS history.

It also copies the spec tests for v1 over to v3.
(PUP-3644) Move legacy routes to /v3 url namespace

This commit removes the "v1" HTTP API, which mounted
all of the various Puppet endpoints at "/" on the webserver.

In its place we now have the "v3" API, which includes
the versioned "/v3" prefix for all of the indirected URLs.
(PUP-3644) Add environments endpoint to v3

This commit adds a copy of the environments endpoint to the v3
routes.  It includes a bit of refactoring (e.g. creating a new
class `V3::IndirectedRoutes` to contain the logic for all of the
routes that come from the indirector) in order to keep the code
for the newer style routes separate from the code for the indirector
routes.
(PUP-3644) Return 404 for v3 endpoints if indirection is not found

For v3 endpoints, the indirection is the first part of the url (after
the version), and the environment is a parameter. This commit makes it so
that an invalid indirection returns a 404 (matching what is done for v2), but
a missing environment returns a 400.

The `url2indirection` method for v3 now handles all checking of
validity of both the indirection and the environment. `url2indirection` now
returns the indirection, rather than just the indirection name.
Merge pull request #3430 from rlinehan/feature/master/PUP-3644-move-urls-to-v3

(PUP-3644) Move urls to v3