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.
@hsaputra 
This code has indentation format issue, could you please take a look why it passed the style checker?