ContentTypeReader Caching

This is a fix for https://github.com/mono/MonoGame/issues/2687.

In this PR I established a static cache of `ContentTypeReader`s so that we don't continue to create and release them over and over on each call to `ContentManager.Load<T>()`.  This is not only a big reduction in garbage generation, but it also should slightly improve performance.

I also included a major refactor of `ReflectiveReader<T>` which moves all the reflection and other guess work into initialization.  This means reading the content does as little work possible which is a huge win on games that have lots of reflective types.

Also ran across a fix for `EnumWriter<T>` which I included here.
Yes... I think your fix is correct.

`_contentReaders` is only used for accelerating the lookup in `ContentTypeReaderManager.GetTypeReader(Type)`.  Since you never lookup a `ExternalReferenceReader` that way then it wouldn't hurt anything.

If you submit a pull request with this fix i'll merge it immediately.  Thanks for reporting it!