Strategy-based refactoring (unfinished)

Most of the code-restructuring is is here, I spent a while rebasing onto 3.x.devel to make this easy. Please accept it, re-run your global formatting and I will continue work
Pay special attention to #52 which changed some of the same code so as at risk of losing something in this pull req.

PS #43 is only only half completed here and lack of #55 compromises the code in several ways (see code comments for 'g-gap') but we can discuss once we're back to the same basic codebase :)