Refactoring shell to promote scalability and simplicity

Refactoring polymorphic in choosing the command to run. An abstract parent class that manages the executable behavior of the command is added. Command classes overwriting the executable method from abstract parent class.
missing doc.