add SingleElem class which encapsulates versioned_value_struct for a 'container of 1 element'. Automatically gets the benefits of extra boxing (for nontrivial types), etc. Can be used for a more generic STM (though fully generic would not require version to be stored in same place as value)