Fix data store update notifications for when store is asynchronous.   Still needs a good test case.   Fixes #15847 on trunk/ !strict.    Also fixing the !ObjectStoreModel doc.
Avoid spurious failure on latest chrome due to precision errors.   If there are still failures after this, then need to change test to do Math.abs(x-y) < 1 or something like that.    Refs #12728.   Fix on trunk/.
more test fixes to avoid spurious failures, refs #7681 on trunk/
Various DOH robot updates:

   - Don't include dijit code into page with robot test code; dijit should only be loaded in the content iframe.
   - Fix double scrollbar on tests (on IE8) caused by overflow:visible setting on <html>
   - Prefer dojo/domReady! to dojo/ready, in order to support other AMD loaders.   However, dojo/ready is still needed for the outer frame to detect when the inner frame (with the content) has completed initializing.
   - Since robot depends on dojo, use domClass.add() and remove() to add dohRobot class to <html> node, to avoid getting a space character in the class string.
   
 Fixes #15865, refs #15616 on trunk/ !strict.
For dojo core and dijit, use require(["dojo/domReady!"], cb) rather than ready(cb) so that dojo code can run against other dojo loaders.

Exceptions:
     - robot.initRobot() related code that checks when page inside of iframe has finished initializing
     - dijit-legacy-requires back-compat code for synchronous mode, which load modules that weren't explicitly required (ex: how dijit/_WidgetBase loads dojo/_base/manager)
     - dojo/parser's parseOnLoad: true support
     - dojo-config-require sync mode operation

This change depends on dojo/domReady! executing it's callbacks in the order they were registered.  To ensure that client-defined callback code executes after the callbacks inside of dojo/dijit, client code should either continue using dojo/ready, or use a nested require(["dojo/domReady!"], ...) inside of the original require that loads the modules:

{{{
require([...], function(...){
         require(["dojo/domReady!"], ...)
}
}}}

Further, when the client code needs to run the parser and then run another block of code, it should be done like:

{{{
require([..., "dojo/parser"], function(..., parser){
     parser.parse().then(...);
}
}}}

Viewport.js needed a setTimeout() to workaround bug #15866.   It should probably be removed when that bug is fixed.

Refs #15616, #15866 !strict.   Changes on trunk/.
Use domReady() as a function rather than as a plugin, so dependencies can be fully resolved on the server.

This required a few changes to dojo/ready and dojo/domReady though:

   - for dojo/domReady, needed to make sure that tasks were executed in the order they were registered, including tasks registered after the DOMContentLoaded event but before the queue of tasks has been completed
   - delay executing dojo/ready callbacks until all tasks registered via domReady() complete, in order to insure that all the dojo initialization code runs before user defined code
   
 Refs #15616 !strict
Fixes #15728.  Prevent pattern from being set on the native INPUT element
Fixes #15876.  Change script variable to a function local to preserve value.
Remove gradient of buttons in Toolbars; they should only have a gradient on hover/active state.   Fixes #15860 on trunk.
Fixes #15864, #15866.  Remove textarea.onresize event trap since the Viewport.on/resize handles this effectively to avoid a resize loop.
Fix for multiversion support for parser, etc.   Use local require() method provided by define(), not global one.   Also addresses AMD-loader compatibility, since not all AMD loaders are guaranteed to have a global require() method.   Fixes #15539 on trunk !strict.
remove descendants of destroyed TreeNode  from selection, refs #15858 !strict.
remove descendants of destroyed TreeNode  from _itemNodesMap[], refs #15858 !strict.
[26809] created a directory called "widgets" for the top level (ie, not form or layout) widgets.   Changing the directory name to something hopefully less confusing.    Normally we put the tests for the top level widget at the top level of the test directory, so I expected them to be directly under tests/_BidiSupport/, but I guess I can see the argument for putting them in their own subdirectory.    Refs #13884.
widgets -> top change, forgot a file,  refs #13884.
Textdir support for Dialog, plus enhancement from #15734 to enforceTextDirWithUcc() to allow first argument to be null, fixes #15764, refs #15734, !strict.   Patch from Alex Shensis (IBM, CCLA).
initial steps to make _setTextDirAttr() method in _BidiSupport.js, based on setTextDirAttr_in_BidiSupport1.patch from Alex Shensis (IBM, CCLA), refs #15739 !strict.
removing unneeded applyTextDir() method and upgrading test to AMD, from NoneAlphanumericTextBoxes.patch from Alex Shensis (IBM, CCLA), refs #15739 !strict.
Make applyTextDir() second parameter optional, getting the text from the node in most cases, refs #15739 !strict.   Also make the code do nothing if textDir=="", to avoid branching in other code.
remove meaningless return statement, fixes #15753 !strict