Implement microversion support on api methods

Adds support for specifying api versioning information
on api methods and the infrastructure to route requests
to the correct method based on the request information.
The api_version decorator allows us to retain the same
method name for different implementations (versions) of
the API method (GET/PUT/POST, etc).

Note that currently the @api_version decorator must
be the first (outermost) decorator on an API method.
We should in future have at least a hacking rule to enforce
this but better would be to remove this restriction.

Partially Implements Blueprint api-microversions

Change-Id: Ifb6698c582d37284c42b9b81100a651fd8d1dd1a