Replace Handler::File with Middleware::Static

Requests for static (public) content get handled by Plack::Middleware::Static
rather than the (megasplat) route previously added by Handler::File. If
Middleware::Static returns a 404, the request is then passed to the
application for processing.

This aligns Dancer2 with Dancer, with
  * requests for static content being processed before the request hits
    the app,
  * No hooks will be executed when static content is served.

There is also an (currently undocumented) setting to disable the static
content handling by Middleware::Static, via  'set static_handler => 0'.

Note that this alters the way the psgi coderef is constructed; rather
than using Plack::Builder we start with the (inner most) app and
(directly) wrap the middleware around, building up the the returned ref.
Replace response attribute triggers with middleware

Removing the two triggers on attributes from Core::Response as prep work
for allowing more flexible response types, such as allowing the body to
be a filehandle.

This involved:
  * Replacing the trigger for response content length calculation with
    Plack::Middleware::ContentLength.
  * Replacing the trigger for removing unnecessare response body (such as on
    a 204 response) with Plack::Middleware::RemoveRedundantBody.
  * Adding Plack::Middleware::FixMissingBodyInRedirect so that redirect
    responses have a short note with the new URI(s).
Replace the passthrough option with a file test.

As @DavsX proposed within the discussion of issue #664.
reflect change
Merge branch 'feature/common_middleware'
Check for DSL object:

We don't check whether we actually got a DSL object, which produces
a undef error instead of saying we couldn't find one.
Merge branch 'fix/dsl'
use correct default value - a sub
Always deserialize: two bugs fixed:

While writing a serializer, I noticed the following bugs:

* We check for a reference before serialize content. This is wrong
  for two reasons: some serializers serialize non-refs (CBOR), and
  some when a serializer is configured, we should try to serialize
  anyway.

* We only serialized if we matched the content-type. This is wrong.
  The content type is for output, not input. It is, in fact, also
  used by the Mutable serializer, but that's beside the point.

This commit contains the following changes:

* Always try to serialize the content in the response (even if it's
not a reference).

* Always try to serialize the content in the response (even if the
content type says something different).
for cleanups sake
reflect change
Merge branch 'fix/serializers'
Tons of tests for Dancer2::Core::Request:

While these aren't all the tests, it took a while to write.

It covers a fair portion of the ::Request object, and it makes
t/request_params.t obsolete.

The following is covered:

* Methods:
    * var
    * address
    * protocol
    * remote_host
    * forwarded_for_address
    * forwarded_host
    * forwarded_protocol
    * port
    * request_uri
    * user
    * script_name
    * to_string
    * path
    * path_info
    * is_head
    * is_post
    * is_get
    * is_put
    * is_delete
    * is_patch

* Attribute:
    * env
    * id
    * accept
    * accept_charset
    * accept_encoding
    * accept_language
    * connection
    * keep_alive
    * referer
    * user_agent
    * x_requested_with
    * vars
    * path
    * path_info
    * method
    * serializer
    * _query_params
    * _body_params
    * _mixed_params

* Attribute aliases:
    * agent -> user_agent
    * remote_address -> address

Things I'd like to check more thoroughly:
* path/path_info
* forwarded_for_address
* forwarded_protocol
* forwarded_host
* host
* is_behind_proxy
* scheme
* Uploads
* Cookies
* Headers
fix test
Require env hash, no default:

There should be no default to the request object. It should be
constructed from an environment hash.
Provide forwarded_host and forwarded_protocol:

We document they exist, but they didn't until now.
Cleanups:

All PSGI arguments are in lowercase (psgi.url_scheme, psgi.input).
Document the request ID:

Why not?
remove obsolete test
add X_FORWARDED_PROTO too