Interim commit
Todo
1: Tweak truncate (simple enough)
2: Switch on async
3: Fix datamap serialisation (broken with new interface)

3 days of wrestling with pointers, raw arrays, inheritance and way overly complex coupled test code
before implementation code tidy up and safety checked.
Tests require full refactor to simplify and make clear intent in each case. Exhaustion wins though