Abstract Command functions
With this release, the name, description and lists of required/optional parameters are provided to Commands by implementing abstract functions.
There are two main reasons that this has been changed:
- It is impossible to forget to implement the required parts of a Command now.
- This allows the Commands' constructors to be used to have data injected from outside of the application, without interference from the setup of command parameters, etc.