Refactor 2d

Ready for merge.  Lookin at you, Caswell
maybe the args should be `list_of_data=None, key_list=None` and then build the dict internally to prevent them from starting off out of sync.