support defmacro, defconst and defstruct, and allow more to be added by the user
adding a basic unit test
expanding unit tests