Merging oo-refactor to master

First, created "legacy" branch to hold the previous version of the code. This was the starting point for this new work and was the state of the code after the last work was finished three years ago. The first pull request is to move the master branch to the new version (one with GUI).

Note: at the time of this pull request, the code (on the master branch) will be a work in progress and will likely not function. I realize that this breaks all sort of rules but this helps me track Issue resolution, and I can't think of a better way to do this since the code architecture is changing drastically from the "legacy" version.