feat(API): Add middlewares to falcon API

A list of Middleware classes can be added to falcon WSGI api.add_middlewares([MiddClass1,...])
A middleware will be executed always with every request/response dispatched, no matters routing and errors.
A middleware can define process_request or process_response or both.
Arguments are the same as hooks and error_handlers.
unify before and after with the use of middleware
fix(Request): Empty value in query string should not be parsed into None

Before this patch, a query string such as "foo=1&foo=&foo=44" would
be parsed into [('foo', '1'), ('foo', '44')] and subsequently folded
into: params['foo'] = ['1', '44']. However, the equivalent list
expressed using the comma-delimited "API" convention "foo=1,,44" would
result in ['1', None, '44'].

This patch normalizes the behavior between the two different list
conventions.

BREAKING CHANGE: When using the comma-delimited list convention,
    req.get_param_as_list(...) will no longer insert placeholders,
    using the None type, for empty elements. For example, where
    previously the query string "foo=1,,3" would result in
    ['1', None, '3'], it will now result in ['1', '3'].

Closes #314
doc: Function _generate_id() in the tutorial is not py3k compatible

This patch modifies the function to just generate a UUID, which will
work for both Python 2 and Python 3.

Closes #304
doc: Quickstart example doesn't work on Py3K due to json.load

json.load in Python 3 no longer accepts an encoding parameter (or bytes),
so the example was reworked to read the bytes, decode them, and then parse
as JSON in three separate steps.

Unfortunately, doing something like this was found not to work:

    json.load(io.TextIOWrapper(req.stream, 'utf-8'))

The reason is that it requires req.stream to implement io.IOBase but at
least in the case of uWSGI's Body class that is used for wsgi.input, the
'readable' attribute is not implemented. Falcon could patch wsgi.input to
provide this, but that would add an extra layer of abstraction that may
have performance implications (TBD).

Closes #275
doc: Specify that these docs are for 0.2.0
chore: Update changelog for 0.1.10
feat(Requests): Add req.host and req.subdomain

This patch adds two new properties, .host and .subdomain, to the
Request class. req.host works with domain names, as well as IP
addresses (IPv4 and IPv6).

In support of these new properties, .parse_host was added to the
uri module. uri.parse_host returns both the host and port, but
req.host ignores the port (if any). This was done so that apps
may call uri.parse_host directly if desired, in order to parse
out a canonical host:port string.

Closes #332
fix(API): merge master and resolve conflicts
fix(HTTPError): Remove dependency on blank title to determine serialization

This patch attempts to make the code easier to understand and maintain
going forward by removing the dependency between the title attribute and
the "serializable" property. The "serializable" property was renamed to
be more indicitive of the context in which it is actually used.

Closes #265
perf(Request): Don't normalize CONTENT_* headers

Rather than always normalizing these headers up front, this patch
simply uses the names as they already exist in env. It was found
that this makes Request.__init__ take slightly less time to execute.

Issue #261
perf(Request): Misc. minor performance enhancements

This patch contains a variety of minor performance enhancements for
the Request class. In the course of making these changes, behavior
of empty strings given for headers was changed to be more strict.

BREAKING CHANGE:
    If a header is given in the WSGI environment, but has an empty
    value, the falcon.Request convenience method for accessing that
    header will not raise InvalidHeader instead of simply returning
    None, since this condition is exceptional.

Issue #261
perf(uri): Speed up uri.parse_query_string

This patch shaves some microseconds off uri.parse_query_string by
switching to using a combination of str.split and str.partition.

Closes #261
fix(testing): create_environ does not decode the path

WSGI servers decode the path submitted in the request before passing it
to the app via the PATH_INFO environ field (wsgiref, uWSGI, and gunicorn
were tested to verify this behavior). This patch updates create_environ
to behave similarly.
fix(API): avoid code coverage in code dependant on python version