(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.