Introduced `AbstractETagAwareResponseMapper` and pulled ETag handling out of `AbstractFreeMarkerAwareResponseMapper`. This is much cleaner.