Add full support for sys module

This change provides support for the `sys` module in cowboy processes.
Where possible new callbacks are as similar to existing OTP behaviours
as possible.

Basic HTTP handlers have two new optional callbacks:
* `code_change/4`
* `format_status/2`

Middlewares now have the following possible return values:
* `{ok, Req, Env}`
* `{suspend, Module, Function, Args}`
* `{system, From, Msg, Module, Req, Env, Misc}`
* `{halt, Req, Env}`

The `system` return value is used to handle system messages. The
`Module` used must implement the `cowboy_system` callbacks:
* `continue/3`
* `terminate/4`
* `code_change/5`

And may implement the three optional callbacks:
* `get_state/2`
* `replace_state/3`
* `format_status/2`

A requirement of supporting the `sys` module is using `proc_lib`. This
has the following side effects:
* A `crash_report` is sent to the error logger on abnormal exit
* The emulator will nolongers sends an error logger on uncaught error
* Uncaught errors will nolonger have a stacktrace in exit signal