Less locking branch
Using class enum for variable elimination strategy

Leads to a much cleaner system
Merge branch 'less_lock'