Create tagged versions of component classes.

It seems that Unity's AddComponent<> doesn't actually use the type any
more, but rather gets the type name then looks up the type. This rather
breaks KAE's multi-version class hunting as it's difficult to predict which
assembly will be used for the class.

It seems that different assembly names might help, but that makes things
difficult for KAE, so instead create classes derived from the working
classes with names including the assembly version. It is these derived
classes that will be used for AddComponent and KSPAddon.
Ignore the tag when checking type name.

I had forgotten that PartMessageService check type names and thus must
ignore the version tag when searching for the service implementation on the
game object. With this, it seems that KAE is working for multiple versions,
so long as all versions use this scheme.
Add some documentation to VersionTaggedType.
A few more classes and usages that need version tags.
Sweep the mess under a rug.

The casting and call to VersionTaggedType now hide in appropriate
extensions to GameObject.
Make the GameObject extensions internal.

So I don't have to document them.