ShowException only serves HTML Accept header contains text/html

Rather than be concerned with whether a request is an asynchronous browser
request or not it is better to simply consider the Accept header and only serve
HTML to clients that specifically ask for it.

This way you will not find your pure JSON API application splitting out HTML
error messages to your console when using curl :)
ShowExceptions minor refactoring

* Load HTML exception template only if needed
* Only #call is public
* Enumerable body concern in one place
Restore public API
Undo template refactoring

As this is orthoganol to HTML rendering change.
Flip to best_q_match, so we provide html to */*
correct typo and refactor tests for coverage

Closes #592