Factor out CommandLineInterface

This enables Shell to just become a facade
Reimplement shell as facade
Merge pull request #19 from Ceasar/facade

Make the Shell class a Facade