Adds DataGroup::isEmpty to test if it can be assigned to.

An empty DataGroup can be assigned to by any DataGroup that can be
assigned from (i.e., the assigner's NamedData are all valid).
VirtualToolCoupler is now inheritable.

The output DataGroup is built in doInitialize if it is empty, and
a helper function adds the necessary data entries to a builder.
So a derived class should call the helper function and then build the
output DataGroup before calling VirtualToolCoupler::doInitialize.
NamedData helper function to cache indices.
VirtualToolCoupler caches DataGroup indices.
Clarify documentation of DataGroup::isEmpty.
Adds missing DataGroupBuilder include for VirtualToolCoupler.
Merge branch 'master' into feature/vtc-inheritable
Adds a NamedDataPerformanceTest that compares getting by name vs index.
LabJackScaffold, catch an error condition earlier: bad timer numbers.

Timer numbers must be consecutive.  For example, it is invalid to
enable timer #1 if timer #0 is not enabled.  The result will be an
error in configureTimers, but the error message provided by the
device library is non-specific, e.g., on Windows: "Timer sharing error".

This commit adds a specific test for this issue, and logs the reason
that the configuration will fail.
Linux/LabJackScaffold fixes for logging bytes, casting to ints.

Bytes stream as chars, but the data being held in these bytes are
actually small unsigned integers.
VTC has buildOutputData instead of a function that takes a builder.

This follows the interface for datagroup building functions in the
scaffolds.
Derived classes should override buildOutputData, in which they will
do builder.addEntriesFrom(VTC::buildOutputData()).
Serialize shape used in RigidCollisionRepresentation

Also revised UnitTest.
Timer can now provide maximum and minimum frame durations.
Fixes sign of depth used in Sphere-on-Sphere DCD contact.

Contacts are represented by negative depths.

Note that this does not affect the MLCP calculations because the depth
is used twice (once per localization) and will cancel itself out
regardless of its sign.
Merge branch 'master' into feature/timer-getmax
Timer getMaxFramePeriod and getMinFramePeriod assert as documented.

Previously they threw an exception due to attempting to access
m_frameDurations.end.
Also adds tests for the Timer assertions.
Merge branch 'feature/timer-getmax' into 'master'

Timer can provide maximum and minimum frame durations.

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1058483
Merge branch 'fix/spheresphere-depth' into 'master'

Fix sign of depth for Sphere-Sphere contact.

+1: Julien Lenoir, Harald Scheirich, Gughan Sathyaseelan

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1062143
Merge branch 'master' into fix/labjack-timernumber
Merge branch 'fix/labjack-timernumber' into 'master'

LabJackScaffold, log a descriptive error message if bad timer numbers.

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1052564