Change TypeExtractor to have non-static methods that do the actual work

This is required because we need state to detect recursive data types.
This will become necessary when introducing Pojo Types.
Add support for POJO objects

This adds support in the TypeExtractor and also one can now use field
expressions for grouping, join, and co-group.