In general, it's dangerous to manipulate a structure due to the m:1 mapping from named containers to structures.  By default, all structure munging fns should always generate a new structure. Expecting callers to explicitly do so will be very dangerous.

What I really want to implement is a `with new_version(structure)` mechanism, but I believe I'd need to change all of the munging functions to have the type of fn that I added to this method for that to work. That is, they'd have to know that they're continuing this new_version rather than versioning further; however, the interface to modulestore has no awareness that it's dealing with structures; so, it's not obvious to me how to do the general soln yet.

I did it here to see what the level of effort and risk was and because, in the case of migrating the live version of a course, it's creating a new structure from nothing; so, there's no other reference risk and creating a new version for each create_item and update_item(because_children_changed) would spam the db w/ useless intermediate states.