Refactoring

Functions have been divided up a bit to make them shorter, but the function and parameter names are still kind of crap ($RuntimeGenericType versus $MethodGenericType , etc.)  Will revisit this later to try to make it more clear.