abandoning abstract types in favor of type parameters

down with abstract types!