Rewriten recognizer - not quite drop in replacement

This isn't really a request for you accept the PR (although you are obviously free to) but a here is something spun off your work. Although I rewrote the recogniser itself having the test app framework made it better/easier to release than just doing the bare classes.