Groundwork for API implementation

Begins introducing some framework class extensions running on top of the
webapp2 framework, including extended Response, Route, and
WSGIApplication classes. These new classes carry an 'Api' prefix.

These extensions include support for

- writing JSON (`ApiResponse#write_json()`)

- specifying route aliases (`aliases` parameter to the `ApiRoute`
  constructor, supported by the `ApiRouteAlias` class)

- graceful unhandled exceptions by logging a critical failure but still
  returning valid JSON (`ApiWSGIApplication#handle_exception()`)

- recording statistics (`ApiWSGIApplication#update_statistics()`)
Abstract request handler class for all handlers

Introduces an `ApiRequestHandler` class that extends the webapp2
`RequestHandler` class with a default statistics hook implementation.
Unless overridden, request handlers will send a 'completed' message to
their application's `update_statistics()` method.
Informational endpoints for instances

Exposes two new endpoints for returning the version of the API running
on the instance and statistics about how many requests have been
serviced by the instance (and with what results).
Extended routing support for API

Adds support for handling redirects to the correct endpoint when the
caller is sloppy (e.g. stray characters, extra slashes) and provides a
fallback when a route cannot be found. All actions are logged and
tallied in the statistics lookup.
Improved application router setup

When setting up the module and path prefixes, we can actually just look
at the name of the package we're in to do the configuration.
Reduced time holding locks for statistics

When dealing with statistics, this requires that when the application
instance is constructed, the available statistics categories be listed
so that a partial statistics dictionary can be pre-built, reducing the
amount of time `ApiWSGIApplication#update_statistics` needs to hold the
lock. These are registered through a new `statistics_categories`
parameter.

Additionally, a dictionary of locks -- one for each category -- will now
be built out, introducing category-level locking. This means that
different parts of the dictionary can now be updated by different
threads and a lock is only required when updating the same category.

Finally, this enables statistics to be disabled application-wide by
setting `statistics_categories` to something falsey or by omitting it.
Additional checks in unresolved routing handler

Performs some additional checks on the existing path and query string
before using them in any redirect logic -- just in case.
Merge branch 'add/web-api-framework' into develop

Brings in the basic framework for adding API endpoints, including the
enhanced webapp2 classes and routing configuration.

Conflicts:
	web/Gruntfile.js