use negotiator

needs additional tests for the problems it fixes. don't really like how i do the media type mapping. 

@dougwilson you can build #919 on top of this if you'd like