Don't override 'Content-Type' if set by endpoint

Also add support for 'text/plain' in Accept header
@cjh1 Most of our endpoints return dictionaries; if the client passes `Accepts: text/plain` to one of those endpoints, this will break won't it? Shouldn't we still try to JSON encode it in that case?