Abstract extension for parameterized classes. This extension contains machinery for implementing parametric classes. Classes may be parameterized on any class implementing the Param interface. This extension handles parameter substitution when a parameterized class is instantiated.