Add basic support for system messages

This changes performs the first step of #750, a simplified version with much improved testing. All system messages are handled by `cowboy_protocol` or `cowboy_middleware`. Middlewares, sub_protocols (and handlers) can not change how system messages are handled.

To have `cowboy_middleware` handle a system message a middleware (or sub_protocol) returns:
```erlang
{system, From, Msg, Module, Req, State}
```
Once the system message(s) have been handled control is passed back to the middleware via a `cowboy_sys` callback. Either to continue processing as before:
```erlang
sys_continue(Req, #state{env=Env}) ->
    {ok, Req, Env}.
```
Or to terminate with reason `Reason`:
```erlang
sys_terminate(Reason, _Req, _State) ->
    exit(Reason).
```

For more information please see the commit message or the additions to the guide.

Help is required to test handling of system messages when a websocket handler receives the message in the  `websocket_payload_loop` receive clause.
I went with the `shutdown` tag as it is caused by the `shutdown protocol`[1] and `gen_event` uses the atom `shutdown` in this case and is the only OTP behaviour to distinguish the terminate reasons in the same way as cowboy handlers. I agree it might be confused with `shutdown` the atom. I am happy to change the tag to anything you want.

Note I view the current cowboy API as confusing because `shutdown` conflicts with its use in OTP.  If API changes are still possible for `2.0` it would be nice if the handlers could copy OTP behaviours and use `{stop, Reason, Req, State}` or `{stop, Req, State}` instead of `{shutdown, Req, State}`. This would turn the current terminate reason `shutdown` to `{stop, Reason}`(/`stop`), which is the same as `gen_event` and a similar return value to other OTP behaviours. I am not suggesting it because of this change, but only to be more inline with OTP.

[1] http://www.erlang.org/documentation/doc-4.9.1/doc/design_principles/sup_princ.html#shutdown