Add BSON support for Json.NET MediaTypeFormatter
- https://aspnetwebstack.codeplex.com/workitem/241
- Refactor JsonMediaTypeFormatter, moving much of it into new BaseJsonMediaTypeFormatter
- All DataContractJsonSerializer support remains in JsonMediaTypeFormatter
- Add new BsonMediaTypeFormatter, another BaseJsonMediaTypeFormatter subclass
- Add (non-standard) MediaTypeConstants.ApplicationBsonMediaType
- Add Dictionary<string, T> and null test data variations -- gaps in previous formatter round-trip tests

Note BSON-specific special cases for null (empty content) and for simple
types and byte[] (Dictionary<string, object> with a single property named
"Value").  May want to publish these workarounds as well as issues with
decimal, uint, and ulong (see BsonMediaTypeFormatterTests.cs).

Nits:
- Make JsonMediaTypeFormatter comments more consistent
- Tighten JsonMediaTypeFormatter contract enforcement
- Merge adjacent #if blocks
- Correct comments referencing JsonMediaTypeFormatter

Test nits:
- Refactor MediaTypeFormatterTestBase slightly to support testing with binary serializations
- Correct value of CommonUnitTestDataSets.ValueAndRefTypeTestDataCollection and remove duplicates from tests using it
- Remove unused DataContractJsonMediaTypeFormatterTests.ValueAndRefTypeTestDataCollectionExceptULong
- Remove unecessary exclusion of TimeSpan data set in HttpAssert.CanRoundTrip(); formatters instead have trouble with DateTime (losing Kind property value)