feat(HTTPError): Support custom media types for error responses

This patch adds support for serializing errors to other media types
besides the generic JSON and XML formats. It does this in two ways:

1. The default serializer will check for a '+xml' and '+json' suffix
   in the media type requested by the client, and if present, serialize
   to XML or JSON, respectively. This was thought to be better than
   simply returning an empty body in the response.

2. The default serializer can now be overriden with a custom
   serializer function, which affords complete control over the
   error serialization process.

Closes #265
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
Merge pull request #337 from kgriffs/issues/332

feat(Requests): Add req.host and req.subdomain
Merge pull request #335 from kgriffs/issues/265

feat(HTTPError): Support custom media types for error responses
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
Merge pull request #340 from kgriffs/issues/332

fix(HTTPError): Remove dependency on blank title to determine serialization
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.
Merge pull request #339 from kgriffs/issues/261

Issues/261
Merge pull request #341 from kgriffs/environ

fix(testing): create_environ does not decode the path
chore(HTTPError): Clean up 405 and DRY has_representation model

This patch modifies HTTPMethodNotAllowed so that it no longer supports
adding details (since it is not common/idiomatic to return a body with
HTTP 405 responses).

BREAKING CHANGE:
    HTTPMethodNotAllowed no longer supports setting a title or
    any other HTTPError kwargs.
doc(falcon.exceptions): Clean up docs

This patch implements the following:

    * Use "e.g." instead of "for example"
    * Document class names in the reference docs under falcon instead
      of falcon.exceptions
    * Add the NoRepresentation mixin to the reference docs
feat(falcon.exceptions): Improve HTTPInvalid* and HTTPMissing*

This patch cleans up HTTPInvalidHeader and HTTPInvalidParam, and adds
two additional, distinct classes to use when the header or param is
missing altogether.
chore(testing): Run tests/benchmarks on PyPy3
Merge pull request #345 from rouge8/pypy3

Run tests/benchmarks on PyPy3
Merge pull request #343 from kgriffs/chore

Clean up error classes
refactor(HTTPError): Rename "raw" method to "dict"
chore(CONTRIBUTING): Inline Angular.js commit style guide

Rather than make readers hop somewhere else, inline the commit style
information to make it more convenient and obvious what is expected.

Also polish up the introductory text and code style requirements to
reduce confusion.