Enable Dictionaries or Lists to create the Machine
Add assertion checks
Add repr()
Make the class more logical
Add custom exception handling