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 
When you have a chance, could you please add the indentation check into stylecheck rules? Thanks!