The primary change in this commit is to add a 'shadow timer' to the fmod wrapper to provide 1ms resolution to the getPosition query.  Basically the timer follows the play state of the fmod channel and provides the getPosition answer in lieu of using the position value from the channel.  As a failsafe, we monitor the difference between the timer and the channel position and if for some reason the timer is more than 50mS 'off' we reset the timer to match fmod.

The other changes are primarily related to extracting better information about timing.  Untangling the actual timing of all the asynchronous operations in V3 was somewhat challenging.  To help with that, I tweaked some of the classes involved to collect better information and add Debug level logging if expectations are not met. In addition, I left some commented out Debug logging that is useful in future debugging work - please leave it.

Here are some specifis about each of the files changed:
-fmod_wrapper:  add PlayTimer class & wire it in. Also added MiniStackTrace class for use in debug output.
-ControllerUpdateAdjudicator:  tweaked pettition to tolerate 3 ms early and add Debug logging when 'petitioned late' by 10ms or more.
-Execution: UpdateStates: added a lock and changed return type to maintain/return a 'last timestamps' dictionary (ctx name/time). The old return value was not used (could be added back via an out param later if needed). The lock is needed because multiple controller threads call into this (yes, I actually saw problems with this - the lock avoids what appears to the controllers as 'skipped updates',
-ContextManager: Update: collects and returns a dictionary of ctx name/timestamp values that were used updating each context.  Also, went back to parallel updating of contexts.
-HardwareUpdateThread: main loop:  no functional change - just a bunch of timing related checking and (some commented out) debug logging. Please leave this in - it has been valuable and will be valuable in the next round of changes I'm looking at.
-MiniStackTrace.cs: new file:  a helper for showing a 1 line limited stack trace - useful in debugging code called from multiple threads.
-sln: added the new MiniStackTrace file in Vixen.Utility

The net result of these changes are that the updates reaching the controllers are much more 'regular' and we have the logging in place, even if commented, that allows us to know that this is true (and to help divine what's happening when its not true).

The next thing I hope to look at is the 'phasing' between audio output and light outputs. Though the audio timestamp is the main reference point for generating lighting data, there are way more delays getting to see light changes than in hearing audio changes. I'm hoping to figure out just how out of sync they are in practice and explore if there is anything we can do to compensate if needed.  The 'regularity' improvements and the instrumentation and logging changes (even if commented now) provide a basis to help with that effort.