perf(Request): Use a list comprehension and don't lowercase the headers

List comprehensions are faster than generators. Also, there is no
need to lowercase the header name, since headers are case-insensitive
after all.
fix: Add output encoding to tests for Python3

In certain environment setups python 3 will detect the appropriate
output as ASCII and will fail when trying to write a unicode string.
Override this by forcing UTF-8.
Ensure long description is Unicode string in setup

Python 3.3 is not able to properly install Falcon
due to UTF-8 characters in the README.rst file. The
characters are fine, we just need to be sure to decode
the open('README.rst', 'rb').read() bytestring as a
unicode string.

An example of the setup failure can be seen here:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 586: ordinal not in range(128)

http://logs.openstack.org/40/55040/2/check/gate-solum-python33/02f9aca/console.html
Merge pull request #201 from jaypipes/utf8setup

Ensure long description is Unicode string in setup
Merge pull request #188 from jamielennox/py3-tests

fix: Add output encoding to tests for Python3
Merge pull request #193 from kgriffs/master

perf(Request): Use a list comprehension and don't lowercase the headers
fix(setup): Fix UTF-8 loading of README.rst

README.rst contains some unicode characters which under certain
environment conditions will cause python3 to fail to read the
description and run setup.py.

fixes: #186
feat(uri): decode percent encoded query string

Per RFC3986's requirement, we decode the query string, plus the
'+' -> ' ' conversion.  We also assume the source string before
percent-encoded is a UTF-8 string, so we decode it as well.

Related bug: https://bugs.launchpad.net/marconi/+bug/1237591
Merge pull request #195 from lichray/percent_query_string

feat(uri): decode percent encoded query string
Merge pull request #187 from jamielennox/py3-setup

fix(setup): Fix UTF-8 loading of README.rst
fix: Duplicate six import
fix(api): 405 Method Not Allowed - False positive

This patch removes the TypeError heuristic code altogether, since it
has been problematic in the past (and often masks app bugs).

BREAKING CHANGE: You can no longer overload a single resource class to
    respond to multiple routes that differ by URI template params. This
    has come to be viewed as an anti-pattern, and so it will no longer
    be supported.

    If you attempt to have a single OxResource that you try to overload to
    respond to both, e.g., "PUT /oxen/old-ben" and "GET /oxen", it will
    no longer work after this commit.

    Developers should be advised to resist the temptation to overload their
    resources; instead, create OxResource and OxenResource. It is common to
    put these two classes in the same module.

Fixes Issue #205
Merge pull request #208 from kgriffs/master

fix(api): 405 Method Not Allowed - False positive
fix(Request): Blank query string is always escaped

This patch avoids passing the query string through util.percent_unescape
when it is empty, in order to save a few microseconds when the client
does not submit any query parameters.
Adds an Exception Handler Mechanism

How to use:
    def handler(ex, req, resp, params):
        log_error(req, ex)
        resp.status = falcon.HTTP_500
        resp.body = "I regret to inform you that an unfortunate error has occured."

    app.add_error_handler(ValueError, handler)
Removes unneeded cruft from error handler tests
chore: Make travis run tests through tox the same way everyone else does

This gives us flake8 stuff and makes the Travis test more real-world.
Merge pull request #214 from kgriffs/travis

chore: Make travis run tests through tox the same way everyone else does
Merge pull request #211 from kgriffs/tuning

fix(Request): Blank query string is always escaped
Merge pull request #202 from sudorandom/exception_handler

feat(api): Adds an Exception Handler Mechanism