1. Added an intrinsic key type pagemap policy to kvds page store to compliment the non-intrinsic key type pagemap policy (still the default) that already exists. 2. Ensured all unit tests for kvds were updated to test new pagemap policy 3. Changed StingyChunkMap to use the new intrinsic key type pagemap policy rather than its own one that it was originally using. It is now using a standard and fully unit tested page map. NB. Unfortunately, because the new policy uses a sparse hash map that needs a deleted key and because StingyChunkMap only used a short unsigned int as the key with all bit permutations being used I had to modify the key to be an unsigned int. This isn't really that big of a deal because we only hold a max of 65535 keys in memory so the increase in usage from 128KB to 256KB. The reward is the look up time should be very slightly faster and the policy code is all now pert of the kvds framework and, thus, fully unit tested. 4. There was no option to save KVDS stores only open and close them. Although most stores are persisted on update not all are so we need to be able to differentiate between a save and a close. All stores were updated to have a separate close and save. The semantics of close were not modified so it will always save before closing for data protection purposes. 5. Updated kvds unit tests to ensure new save/close semantics are tested separately. 6. Ensure we always save immediately after a restore (just in case!) 7. Ensure uFPClient and lastfm.fplib outputs UTF8. Note: This code has been commited before it has been actually reviewed. If there are any issues identified they'll be fixed retrospectively.