Add user and channel arguments to commander.

- Refactor the command into an exported struct. This will be good later.
- Add helpers to create Command structs.
- Add some helpful functions to CommandData since they were used
  internally.
- Add more data to CommandData for user and channel argument handling.
- Refactor tests to solidly verify error messages.
- Add more documentation.
Split commander up into several files.
Refactor commander argument handling.

- Make all arguments use attributes instead of some using bools, some
  using ints, and some using attributes to describe their behavior.
- Refactor the argument metadata into a struct.
- Remove unused functions.
- Refactor all three functions that dealt with arguments into one
  function that calls more specific functions.
Propagate commander interface change throughout.

- Fix bot tests.
- Rework bot's register commands.
- Fix core commands.