Refactoring to support conneg in OnError pipeline

A WIP for conneg support in OnError pipeline. Fixes #1212

So what I've done is rip out all conneg code from `DefaultRouteInvoker` and put it in a new class, `DefaultResponseNegotiator` (naming suggestions?) along with its interface `IResponseNegotiator`. This allows the conneg functionality to be used for not only route invocations, but also for the OnError pipeline and potentially other things as well.

I then changed the OnError delegate to `Func<NancyContext, Exception, dynamic>` to allow returning other types than `Response`. This result will then be negotiated through `IResponseNegotiator.NegotiateResponse` in both `NancyEngine.InvokeOnErrorHook` and `DefaultRequestDispatcher.ResolveErrorResult` to return the response in the correct format.

I also added an extension method to `NancyContext` so you can do

```csharp
pipelines.OnError.AddItemToEndOfPipeline((ctx, ex) =>
{ 
    return ctx.Negotiate().WithModel(new Error
    {
        Message = ex.Message,
        Details = ex.ToString()
    });
});
```

Feedback, anyone? (Yes, the tests will come :smile:)