Adding support for content negotiation.

This change consists of :
1. Conneg based on request headers, supports the following 3 scenarios:
	a. ContentType property on ObjectResult set to null or is empty.
	b. ContentType property on ObjectResult set to a single content type.
	c. ContentType property on ObjectResult set to multiple content types.

2. Parsing Helpers, comparers and extensions for comparing various http headers.
3. Tests.

Open workitems:
1. Remodel JsonResult and ContentResult to be a derivation of ObjectResult.
2. Add support for acceptcharset headers.
3. Produces Content Attribute.
4. Sample for adding a result filter for adding a custom formatter to the collection.
> WriteAsync should not have to do anything but write the body.

This is the part that's arbitrary. 

You could set headers and write the body in `SetResponseContentHeaders`. You could set headers and write the body in `WriteAsync`. Providing two methods doesn't provide additional safety because you can still code things in the wrong order, or ignore thing the contract implied by the method names and code things in the right order.

The simplest design here is to have one method, because the two that are provided have the virtually the same contract.


My suggestion, if you really want to provide a guarantee about safety here - then don't provide the Response stream to `SetResponseHeaders` and don't provide the header collection to `WriteAsync`. Or do this in the `OutputFormatter` base class, which we'll steer users towards using anyway.