removes unnecessary generics
moves more stuff up to AbstractMockOperation with numerous side effects many related to using interface types rather than implementation types