New setup.py

This is an overhaul of setup.py to make it more understandable and extensible. It should allow us to easily expose more of our underlying tools.  This probably super breaks CI since CI is dependent on the proclivities of our setup.py. Feedback welcome.