Efficiency experiment

I originally branched off master to try rewriting to reduce unnecessary use of objects and streamline the code.  I'm not sure how much I accomplished, but as of right now the branch has more features and improvements than master, so I'm merging it back in.

In the future I'll try to keep better track of where I'm adding new features vs a branch dedicated for testing.