Corrected CTRL-Clone bug as part of VIX-501
Reworked Lipsync Text Converter Dialog to be more Friendly
Corrected issue where Converted Phonemes would not post at current cursor position.
Added option to allow converted Phonemes to be placed on Clipboard instead of timeline.
Disabled resizing of Text Converter Dialog.
Correct alignment of Cancel Button on Lip Sync Map Selector
Add Right-Click to Matrix Editor to allow for Erase function.
Changed display of Lipsync Effect Editor objects to display phrase associated with Phoneme
Fixed an issue with an null object in the Grid
Merge branch 'master' of https://github.com/sall/vixen
Fixed text rendering in Nutcracker
Merge remote-tracking branch 'remotes/ebrady1/LipSyncChanges'
Merge remote-tracking branch 'remotes/derekbackus/master'
Merge remote-tracking branch 'remotes/ebrady1/VIX-501'

Conflicts:
	Modules/Effect/LipSync/LipSyncData.cs
Added counter-clockwise string rotation to the star smart object
VIX-509  - Corrected crash where LipSyncTextConvertForm would incorrectly try to sort the list of Mark Collections.  Changed sorting algorithm plus operation of Start Offset box when user performed certain operations on the grid.
Added a 'Pixel' checkbox to the V2 to V3 mapping screen. And a column to reflect the setting.
When the pixel checkbox is checked the repeat field is forced to '3' and the destination color mappings are fixed at 'Red' 'Green' 'Blue' (in that order).
Modified the conversion function to use a state machine that concurrently processes three effect types:
Constant on
Ramp up
Ramp down
The state machine allows the conversion process to be more efficient.
Make only a single pass through the data (was four passes).
For my display this reduced the number of effects on any given channel to one (The original mechanism sometimes had three or four effects per v2 channel).
Adding Pixel color mixing and color regeneration prior to the state machine reduced the effects generated per pixel from (up to) seven down to one.
Corrected issue where CSV File would contain channel #1 twice
Make an override to how effect intents are handled in Nutcracker as we only generate one intent per element for the entire timespan. Instead of checking to see if the intent covers the relative time we can just return it as we already know it does.
Protect ourselves from null reference if we don't find a row at the grid location.
Make sure we dispose of the previous bitmap properly.
Make some changes to help reduce the number of objects created. By design the ConcurrentDictionary makes a copy of all the elements to use when calling the enumerator. This process can take a a hit occasionally if there is a large amount of elements as it could be allocated on the Large Object Heap. Especially if memory is already tight. This leads to fragmentation as this is done every update cycle. Change to use a regular dictionary and employ locking as needed to avoid the copy. ContextManager did the same thing, although not a big object, still created many object with short lifespan which keeps the GC busy. We have enough of that in other areas.
Move instrumentation outside of the lock.
Comment out some unnecessary debug code in he main controller loops.