Totally restructured registers.  Much better now

Moving away from abstract types and towards type parameters