Refactor 2d

Ready for merge.  Lookin at you, Caswell
This won't work.  Should be `self._key_list.remove(lbl)` which will raise `ValueError` if it does not exist.