New abstract Command class
To help with readability, all of the behaviours of a Command must now be defined in the return of new get* functions on the base Command class.
This avoids having to remember all of the possible options to perform in the constructor. New functions include:
- getName
- getDescription
- getRequiredNamedParameterList
- getOptionalNamedParameterList
- getOptionalParameterList
- getRequiredParameterList