Use ContentTypeEngines to optionally process request bodies

The engines have been moved into a container class which maintains common logic to lookup an engine based on a browser-supplied complex content type.  This container class is shared with the `Request` and `Response` objects.