Fix KeyedList variance and joining

closes #710 

Couldn't get f-bounded polymorphism to work, went with Abstract types. This required me getting the variance right on Grouped, which is a win, but more code.

Added a test for the case that was not working before.

As a win: removed two unneeded casts (which were broken after this change).