Add PreconditionFailed exception
Switch to a view level setting for using etags

* Check for existance of `use_etags` as a precondition.
* Set etag_header irregardless of the HTTP_IF_MATCH header state.
Tidy up etag precondition checks
Add IfMatchMissing exception

Needed to make testing easier.
Check `use_etags` before trying to set ETag header
Use built-in status code variables