Avoid any possible race conditions by making sure increaments are done before work starts and decreaments are done after work has finished
Abstracting the path walk so I can have multiple different path walkers
By using an interface I have now implimented 2 PathWalking stragegies. There is still alot of code duplication here, so firther work is needed. However this compiles and the test run.

Also write more test for checking the path walkers.
The test is slightly better, but more testing is still needed.