Adding some utility routines to ObjectPool

The operator() overload is for convenience, but the IsEmpty call is actually the only synchronous way to ascertain whether the object pool is empty.  This operation consults both the outstanding count and the cached count to obtain its result.
Adding a few Bolt convenience routines
Test extended to guard against unexpected context nesting
Merge branch 'bug-contextenum' into feature-newtransport
Correcting invalid overload resolution optimization
Adding argument-forwarding AutoRequired overload
Merge branch 'feature-corejobtimedwait' into feature-newtransport
Merge remote-tracking branch 'origin/develop' into feature-newtransport
First step in client-side cleanup
Adding documentation for Autonet
Added shared_object data type, and associated guard_object type.
Adding tests for guard_lock.
Redesign of shareable objects.

atomic_object handles synchronization via atomic methods, but is not a shared resource.
shared_object guarantees existence and implements atomic access to a shared mutex_object.
unlock_object guarantees both existence and mutability of an shared_object. Because unlock_object  has no copy methods it encourages correct scoped usage.
Clarification and simplification of casting by enabling unlock_object to apply to both atomic_object and shared_object.
Merge remote-tracking branch 'origin/develop' into feature-messenger
Created alert for Autonet breakpoints
Basic functionality of autonet breakpoint works
New map implementation of breakpoints on client
Now works with multiple breakpoints
Template the locking implementation, with a default to mutex.