Moved runner and test code to separate file.
Changed properties from requiring state only to requiring the whole entity so we can use position as well.
Made heterogeneous part more generic. Cleaned up enhanced reader stack and removed unused specialized parts of the reader stack.