Initial pass at a Shell
Improve shell and add tests