Refactor strategies

A general refactoring of the strategies module

1. Introduce stategic all `sall` and refactor `top_down` and `bottom_up` tree traversals.  Add `top_down_once` and `bottom_up_once`. 
2. Rename files `strat_pure.py` -> `core.py`.  Move some functions around into better locations
3. I'd like to rename the `rules` directory to `strategies`.  The majority of this directory is about strategies to apply functions, not about rewrite rules.  Rewriterule code is actually found in `unify`.  I suspect this is a bit confusing.