Merge branch 't4031' into mshtmlLiveRegions_fillVBuf
Support for ARIA live regions in MSHTML, implemented via the MSHTML VBufBackend.

* fillVBuf now takes an oldNode argument, which when called from render, is the original node being re-rendered, but is null for all other recursive calls.
* fillVBuf takes a atomicNodes argument by reference, which is created by render. This set is for temporary tracking of aria-atomic nodes that should be announced when hit or at the end of the render, if a live region update occured within an atomic region.
* MshtmlVBufStorage_controlFieldNode_t: now contains various aria live region properties to track if the node is a live region, what kind of updates are relevant (text, additions), if its busy, and if its part of an atomic region.
* MshtmlVBufStorage_controlFieldNode_t: has a preProcessLiveRegion method, which is called by fillVBuf when adding a node to the buffer. This method updates all of the ARIA live regions properties on the node, either calculating their values from HTML attributes if they exist, or copying them from their parent (in this buffer or the original buffer).
* fillVBuf: takes an inNewSubtree argument, which is false when called from render, but is set to true on recursive calls if the current node was not in the old buffer (i.e. its ID does not point to a node in the old buffer).
* MshtmlVBufStorage_controlFieldNode_t: has a reportLiveAddition method which collects text content and announces it with nvdaController_speakText.
* MshtmlVBufStorage_controlFieldNode_t: has a postProcessLiveRegion method, which is called at the end of fillVBuf if this fillVBuf was called with inNewSubtree set to false (i.e. its not in a new subtree, or its just the top node in a new subtree). This method is responsible for checking if this node is part of a live region and should be reported. It may call reportLiveAddition to report the node if its new, or it may compaire child text with the old node's child text to see if text should be reported and call nvdaController_speakText to report the text. However if the node is part of an atomic region, that atomic region is added to the atomicNodes set for alater reporting.
* FillVBuf: after postProcessLiveRegion is done, atomicNodes is checked to see if the current node is in the set. If so its removed, and has its reportLiveAddition called, thus having the atomic region reported.
* Render: after fillVbuf is called, any remaining nodes in atomicNodes are fetched and reportLiveAddition is called on each, thus reporting any atomic regions in the ancestors of the render, referenced by live region updates within the render.
VBufBackends: decrease the render timeout from 250 ms to 100 ms. Mostly needed to make live region reporting faster.
Support live regions in MSHTML documents, dialogs and applications by Useing MSHTML virtualBuffers for documents, dialogs and applications, but force focus mode for things that are not documents (e.g. dialogs and applications).

Specifically: move the check out of shouldCreateTreeInterceptor into MSHTML virtualBuffer's constructor and force focus mode if needed.
MshtmlVBufStorage_controlFieldNode_t: add a reportLiveText method which will speak any given text, as long as it is not entirely whitespace. reportLiveAddition and postProcessLiveRegion both use this method.
MSHTML VBufBackend: force an invalidated subtree to be re-rendered with no delay if it happens to be inside a live region. to speed up live region reporting even further
speech.speakTextInfo: Stop accidentally reporting controlFields that may slightly change in virtualBuffers (name change, change of child count) by Using a uniqueID value in controlField dictionaries for comparison if it exists rather than compairing the entire dictionary. VirtualBuffers now expose uniqueID generated from the docHandle and ID of the node.
Reverting a change from December 2009 commit 6c53a29d where IAccessible NVDAObject's name property was forced to contain content from IAccessibleText if there was no caret present.

This was supposed to allow focusable labels in Thunderbird to read nicer. However, this caused a long-standing issue where the content of alerts in web browsers would speak twice, and Thunderbird now seems to oddly expose a caret on the labels thus disabling the code change anyway.
Removing this code may possibly cause some other regressions as its very old. However, if regressions are found they should be handled specificly for each case, as clearly this code was too general.

Should be a fix re #3481. May affect re #2442, #2745
Merge branch 't3481'. Fixes #3481
Merge branch 't2199'. Fixes #2199
Merge branch 't1846'. Fixes #1846
cancellableSendMessageTimeout: SendMessageTimeout can block until the window responds in some cases despite the timeout, so use a background thread to send messages.
cancellableSendMessageTimeout: Place a lock around the unresponsiveThreads set, as writing to STL containers isn't thread safe and was causing crashes.
cancellableSendMessage: Pass the data pointer to the thread proc, as the global variable might be null if the message gets cancelled before the thread starts executing, causing nasty crashes.
If message cancellation was already requested by the time cancellableSendMessage starts, just return before doing anything.
cancellableSendMessageTimeout: cosmetic: Use a LockableObject instead of directly using a CRITICAL_SECTION. Also, rename/reorganise/comment for readability.
MSDN says you can't safely read from an STL object while another thread is writing. I doubt this would cause crashes, but acquire the lock just to be safe.
cancellableSendMessageTimeout can't handle reentrancy, so abort early for reentrant calls.

As far as I know, there shouldn't be any reentrant calls to SendMessage* from oleacc or UIAutomationCore in our main thread, but I'm not absolutely certain, so it's best to be safe.
It should be possible to make this code reentrant if we discover this is a problem.
SendMessage hook: Initialise the result variable to 0 so an uninitialised value isn't returned on error.
cancellableSendMessageTimeout: The result variable passed to SendMessageTimeout should be DWORD_PTR, not DWORD.

This should make no difference for NVDA since it is always 32 bit, but best to be correct.