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.
Well, this is something that should have been dealt in the formatter's write call, however I am reluctant to do so because of two reasons. 
a. Since the content type gets selected in the CanWrite call unless we want to set the header in CanWrite, really there is no escaping the property on the formatterContext ( or if we choose to return a DTO from CanWrite), its just a matter of handling that returned value here vs in the Write Async.  
b.  When we start looking at accept charset, the reading/sorting of the charset header happens in ObjectResult, so really either we say that we pass the accept header, or be dumb about it and let the WriteAsync do all that heavy lifting (which is probably a better option). 
I am choosing to go with this for now and have a discussion when we introduce accept-charset headers ( which would be the very next pr). .  - Thoughts?