Commands Refactor Part 2

We split #196 in two parts. this is the second. (#262 is the first). This builds on all the changes to commands/.
Done in cae3c4e

This is one of two ways to implement it. I had it the other way before (iterating through the values instead of the definitions), and you told me to switch it to this way :/ Maybe it looks sketchy at first glance, but this is basically the least sketchy way of doing it.