Many Function implementation classes are public; causing confusion when users go to look for how to do things.

  1. Change function implementations to be package visible; so test cases and factory instances can still work with them
  2. Any function that requires interaction is probably broken; many of the collection functions are broken in this manner