Commands datatype table

This adds a join table that links a command up to the datatypes it can be run on. Needed so we can programmatically populate the commands selection for each datatype.
In what context would a ```TypeError``` be raised above?