Seperates error handler into a plug

* Adds `Phoenix.Plugs.ErrorHandler`

* Plugs `Phoenix.Plugs.ErrorHandler` at the highest level, so that other custom plugs can handle errors.

* Removes error handling at Dispatcher client and `Phoenix.Router`.

* The exception message would look ugly right now. I followed the conversation b/w @chrismccord and @ericmj on IRC that the dispatcher gen_server is going away. The error will look better, once it's gone.

According to this PR, to handle custom errors, plugs that look like the following can be added to app to handle custom exceptions/errors:

```
defmodule MogoChat.AwesomeErrorHandler do
  @behaviour Plug.Wrapper
 
  import Plug.Connection
  import Phoenix.Controller
 
  def init(opts), do: opts
 
  def wrap(conn, _opts, fun) do
    try do
      fun.(conn)
    catch
      kind, AwesomeException[message: reason] ->
        html conn, 401, "Unauthorized awesomeness! Please find a bug to fix"
    end
  end
end
```

Right now, because of the Dispatcher gen_server, I'm wading through some extra info and the custom error handler looks like this - https://github.com/HashNuke/mogo-chat/blob/dcdd942a4aa078222539ca69af8a5ee80aa9dcd9/lib/mogo_chat/auth_error_handler.ex