Use a C++14 std::shared_timed_mutex for locking
This significantly simplifies the member locking implementation since we no longer have to worry about tracking the number of active locks; instead read locks are shared locks and write locks are exclusive locks; the stl implementation can worry about the details beyond that. This also disallows recursive member locks; instead calling code has to manage itself to avoid double-locking a member. Note also that switching a write lock to a read lock is no longer guaranteed to be non-blocking as there is no way to downgrade an exclusive lock to a shared lock. boost::upgrade_mutex could allow this, but this importance of this is minor and it seems nicer to get rid of the boost dependency. It also changes the main Simulation run lock to be the same stl implementation; previously it was using the boost implementation. With that, the boost thread, date_time, and atomic library components are no longer required.
Showing with 129 additions and 208 deletions