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.
I am suspecting if this check will cause issues...here we are comparing raw values of a request's Accept header value or Content-Type with a supported media type of a formatter and this check would fail in some valid scenarios...
Examples: 
1. `Accept : application/json; p1=value1` and supported media type `application/json`
2. `Accept : application/json; p2=value2; version=v1` and supported media type `application/json; version=v1`

In Web API an incoming request could have many parameters on its accept header but the requirement is that it matches the requirement of a formatter's supported media type