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.
Ditch regex matches in the router

Replaces these with normal segment length checks. This is possible with
all-string keys because the handlers already check the keys using a dict
lookup, so we can save some time by just relying on that rather than
doing regex checks while trying to dispatch a URL to its handler.
Remove segment length checks in dispatcher

Benchmarking with timeit shows that it's actually quicker to just throw
the args list together and let the handler figure out whether or not the
parameters are valid -- even the "fail fast" benefit of checking the
segment length on misbehaved requests is outpaced by the cost of
checking each segment's length.
Remove minimum segment lengths from router

Without the segment checks, these are no longer used.
Merge branch 'chg/web-api-wsgi.noregex'

This brings in a regex-less router, relying instead on all data keys
across the entire api package being string-based and thus not needing to
do pattern checks or conversions. Instead, this relies on the handlers
verifying the integrity of the captures by doing (quick) dict lookups
against their data sets.

Conflicts:
	web/api/dynamic/base.py