Content Serialization Fixes

This PR implements a bunch of fixes for the content serialization process.

I started by converted the existing `IntermediateSerializer` unit tests to also call the `ContentCompiler` to generate an XNB and then the `ContentManager` to load the serialized type.  This round tripping exposed several bugs where the `IntermediateSerializer` worked correctly to XNA behavior, but either the `ContentCompiler` failed to serialize the type into XNB format correctly or the  `ContentManager` couldn't load the compiled content type.

Note I considered writing separate `ContentCompiler` and `ContentManager` tests, but for these binary serializations it seems like the resulting code would have been extremely redundant to what the  `IntermediateSerializer` tests already did.

So this extra testing solved a few different bugs:

  - We were not including the underlying type when serializing `EnumWriter<T>`.
  - We were not including the base type when serializing with the `ReflectiveWriter<T>`.
  - Fixed serialization and deserialization of polymorphic types (Fixes #2817).
  - Fixed case where non-public getters were being ignored.
  - Implemented getter for `FontDescription.CharacterRegions`.
  - `OpaqueDataDictionary` was missing the content "item name" attribute.
  - We now use `CanDeserializeIntoExistingObject` to serialize getter only properties.
  - Fixed a few cases where `existingInstance` wasn't being obeyed.
  - Cleaned up `ContentReader` removed a lot of redundant code.
  - Added clear exception when the `typeReaderIndex` is out of bounds.

Now I haven't tested this beyond just the unit tests.  It is possible a broke something, so it would be great for people with lots of content in their game to give this a test before we merge things.

Thanks to @Firedragonweb for poking me on this!