Add DSL method for custom commands

Closes #19.

I intended this to be as low-impact as possible, but I did end up making a couple stylistic changes in unrelated places. I refactored some of the tests to be more in-line with Rspec best practices (at least, I have found them to be best practices).

There's more detail in the first commit message. I tested this locally and it seems to work (with one tweak, which I will send as a different PR). Let me know if you'd like me to do any more work to make this mergeable.

 Cheers!