Add more abstraction to tuples to support more than collections
Move tuples inner classes out