Initial pass at pure WSGI implementation

Removes the webapp2 dependency and replaces it with a very simple router
that parses the incoming requests and writes out the JSON returned by
the handler.
Stub handlers for the CTA rail arrival endpoints

There will most likely be four of these: a list and detail version for
stations and tracks.
Enforce GET method only

Returns a HTTP 405 if the client tries to do POST, PUT, etc.
Modularize new WSGI implementation

Places the base classes (Response, ResponseMessage, Wsgi) into a "base"
module for access across the package. Also includes some cleanup of how
the handlers are implemented and adds documentation.
Minor base class adjustments

Adds additional documentation as well as a stricter check on the data
payload before returning it to the web server for correctness.
Documentation updates for dynamic API

Includes some more thoughts on how to handle runs/arrivals as following
the same pattern as routes/movements.
Fail fast for the dispatcher

Adjusts the dispatch code so that if an incoming request could never
possibly be serviced given the routing table, that we will return
immediately instead of trying to parse the URL. Currently, this is done
by checking the number of slashes (and therefore segments) in the
request URL in addition to its length.
Documentation updates

Covers some TODOs regarding the second-level resources and also
improving the dispatcher.
Precompilation for lookup patterns

Moves the responsibility for precompiling the lookup patterns for the
static data modules into the data package itself. This still allows
access to the pattern that made the regular expression object via its
'pattern' data member.
Convert/min/max specification for static data

These new bits of information will allow the router of the dynamic API
endpoints to handle more precise handling of segment captures in the
future.
Move regular expression generation into METAs

This is preferable for the purposes of getting the module running faster
and is also friendlier with pylint.
Rename parameter for regex functions in builder

The new names conform more with what pylint requires of parameter names.
Punctuation fix on redirect messages

Fixes log messages that are sent for redirects by keeping the
semicolons with the headers.
Route-built-in regex and conversion for handlers

Moves all the regex checking and type conversion boilerplate from the
individual handler implementation and into the router itself. This will
also, rather subtly, allow the router to short-circuit and return a
failure as soon as a segment is known to be bad.
Check segment count rather than slash count

The former has the advantage of only needing to scan the string twice.
In addition, we can always pass a maximum split count to the split
function so that we do not end up doing unnecessary work on the string
once we have hit the limit.
Annotate the Wsgi class with slots

By specifying a __slots__ list, accidentally misspellings can be caught
and class instances' variables are known up front.
Consistent use of segments

Instead of sometimes referring to URL pieces as segments and sometimes
as components, standardizes this to be segments across the base module.
Use strings for all data keys

At runtime, the endpoint instance will be looking up data from
string-based sources (e.g. URLs, XML feeds), and as such, currently have
to make a conversion to integers for every lookup. Additionally, to know
whether such a conversion is good or not, a regex check has to happen
too.

By converting everything to be string-based, both the conversion and
regex match check could be avoided entirely just by doing a dict lookup,
which already has to be done anyway.
Removal of all key-related type conversions

Because all keys are now guaranteed to be strings, to-key-type
conversions no longer have to happen for the purposes of handlers nor do
to-str conversions need to happen for matching, file system, and other
purposes.
Pass prefix to router initialization

Passing the prefix to the router initialization is less prone to errors
because the begin level and prefix length can be derived from the
prefix.