Reworked the command registration system

Please read the [javadoc](https://github.com/Limeth/Terasology/blob/16965803d4edd128ce5baaa3c35e814de26752f3/engine/src/main/java/org/terasology/logic/console/Command.java).
Should I surround the return types of ICommand methods getDescription(), getHelpText(), getRequiredPermission() with the Optional<> class, then? I don't have experience with it, but it seems like if someone uses it, they use it everywhere possible.