(PUP-3642) Remove environment name from URL path

This commit makes some changes to the indirector network layer
such that the environment name is no longer a part of the main
URL path structure.  This will allow us to have a more finite URL space
and run Puppet in the same webserver with other apps, without
worrying about URL collisions.

Instead, the environment becomes a query parameter for GET requests, or part
of the form body for POST requests.

For PUT requests, the HTTP specification doesn't allow a query string, so the
environment must go into the request body, which is deseralized by the
indirector model. The commit changes the logic such that all indirector model
objects that can have `:save` called on them are now expected to provide an
`environment` getter method that returns the environment, presumably
deserialized from the request body.

In order to achieve this, the commit changes the implementation of
the `uri2indirection` method so that, in the case of `:save` requests,
we read the body into the model object a little earlier than we
would have in the old implementation, and we pass it along in the
params map so that it is still accessible when the `do_save` method
is called a little later on.