Entry for all API calls

Introduces an "api" package that will hold the implementation for all
API calls and provides a "wsgi" WSGI application instance.
ApiResponse and ApiWSGIApplication

Introduces extended versions of the webapp2 framework classes for
dealing with application-wide issues (e.g. default response headers,
JSON output).
About instance endpoint

For requests to /api, we can return some basic information (e.g.
version) about the running instance.
Handling for unresolved requests

Introduces a handler for incoming requests that do not match any valid
endpoint.
Rename module "about" to "info"

The latter is more representative of what is returned by this endpoint.
Separated "base" modules for webapp2 extensions

Moves the existing ApiResponse and ApiWSGIApplication classes out of the
root init module into a new "base" module, cleaning up the init module
considerably.
Common ApiRequestHandler base class

Introduces a new abstract base class that all request handlers will
extend from to automate some new functionality.
Completion statistics

Adds support for the request handlers to send completion notifications
to the application instance for the purposes of maintaining statistics
of paths requested and status codes returned.
Endpoint for instance statistics

Introduced as part of the "info" module, this allows a user to request
statistics about completion counts from an endpoint.
Recovery for sloppy paths

If the caller uses a path in their API call that is easily recoverable
through a redirect (e.g. capital letters, spaces, extra slashes), we can
go ahead and make that correction.
Newline after JSON writes

This makes the API easier to debug using shell and cURL requests.
Statistics implementation via hooks

Allows implementing handlers to override the default statistics
behavior, if necessary.
Custom statistics hook for unresolved paths

Instead of reporting these as "completed", we can report them as
"redirected" or "unresolved" (as appropriate).
Consistent use of variable for paths

We should use path consistently rather than path_info.
More liberal application routing

Enables the use of case-insensitive routing into the API package from
the app.yaml configuration.
Overridden statistics hook documentation

Explains why the statistics hook for the unresolved module needs to be
overridden.
Parent class calls using super()

Converts explicit naming of the parent class with the super() proxy
object form instead.
Rename 'unresolved' to 'routing' module

The latter will reflect the fact this module will soon be handling
aliased routes.
ApiRoute class

Extends the webapp2 Route class, specifically adding the ability to pass
a list of route template aliases with the constructor.
Integrate ApiRoute with application initialization

Promotes all the existing routes to be full-fledged ApiRoutes instances
and specify lists of aliases, except for the catch-all route.