Totally reorganized everything this go

Executable is now distinct from the library code, which is now in a
library project with its own unit tests