Refactor to enable full ADT functioanlity

This commit contatins the changes that allow this module to now be used as a starting point for the full suite of abstract data types.