Not as fast as it could be, suspect the string conversion is not helping
Couple of inlines are needed to avoid duplication of functions between compilation units
Fully works!
Needs some testing yet, and to be made a first-class citizen