Updating atomic object to make use of a lock heirarchy scheme

Required because not all of our target platforms have std::lock (yet!)

For now we'll enforce a locking heirarchy with a simple predicate based on the assignee location in memory.  This is guaranteed not to cause deadlocks as long as the copy operation is trivial or, at a minimum, doesn't attempt to obtain any locks.