fix(Request): Improve parsing of application/x-www-form-urlencoded

This patch adds error handling for non-ASCII form request bodies. If
an improperly-encoded request is submitted, Falcon will log a message
to the WSGI error log and ignore the request body.

The docstring for Request was updated to provide more information
regarding Falcon's parsing of application/x-www-form-urlencoded,
especially regarding the client's responsibility to properly
encode the request body.

Closes #313
fix(Request): Be more lenient regarding query string param names

This patch allows a wider variety of characters to be used in
query string params, while also slightly improving the performance
of parsing the same.
* Refactor internal APIs to allow overriding traversal by subclasses.  This
  enables subclass implementations to provide e.g. restish-style object-based
  traversal.

* Add a `params` property which gives access to the full POSTed parameter list.

* Handle the case where a form POSTs keys multiple times.  This is a more
  common way of doing multiple values for a single key.  Thus these two forms
  are semantically equivalent:

  key=1,2,3
  key=1&key=2&key=3
Merge pull request #307 from warsaw/refactor

Internal refactoring and a few other changes to support restish-ish traversal
chore(AUTHORS): Add Barry and Jeffrey. Thanks guys!
Merge pull request #316 from kgriffs/issues/313

fix(Request): Improve parsing of application/x-www-form-urlencoded
Merge pull request #317 from kgriffs/qs_parsing

fix(Request): Be more lenient regarding query string param names
fix(Request): Unify behavior of get_param for lists

This patch changes get_param so that it behaves the same whether a
list was specified in the query string using the HTML form style (in
which each element is listed in a separate 'key=val' field) or in
the more compact API style (in which each element is comma-separated
and assigned to a single param instance, as in 'key=val1,val2,val3').

Closes #312
Merge pull request #320 from kgriffs/issues/312

fix(Request): Unify behavior of get_param for lists
feat(Response): Add convenience method for setting stream and length

This adds a convenience method, set_stream(...), to the Response class
for setting the stream and its length at the same time, which should
help people not forget to set both and maybe save some typing as well.
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
feat(Request): Add client header check for msgpack

Add convenience methods for msgpack to Request.

Signed-off-by: kgriffs <kurt.griffiths@rackspace.com>
Merge branch 'peoplemerge-msgpack'
chore(AUTHORS): Add peoplemerge. Thanks for contributing!
Merge pull request #318 from kgriffs/stream-improvements

feat(Response): Add convenience method for setting stream and length
doc: Add mailing list info
Merge pull request #322 from kgriffs/issues/314

fix(Request): Empty value in query string should not be parsed into None
Merge pull request #323 from kgriffs/issues/304

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