ENYO-269: Add retainNode feature to enyo.Control

When using a virtualized list or repeater, a gesture may originate
with a DOM node that ends up being destroyed in mid-gesture. This
stops the stream of DOM events representing the gesture and will
generally halt the action being taken in response to the gesture
(or otherwise break the behavior).

The solution in this case is to keep the original DOM node around
until the gesture is complete. We have had a point solution in
enyo.List for some time (to support drag-to-reorder), but we now
have a similar need related to Garnet's wheel controller, which
is used (among other purposes) to scroll virtual lists based on
enyo.DataList and enyo.DataGridList.

The retainNode feature on enyo.Control is intended to generalize
the solution so that it can be shared across similar use cases.
I have tested this against both enyo.List (where I've used it to
replace the existing point solution) and the Garnet wheel
controller / DataList.

The functionality hooks into Control.teardownRender(), which is
used by all of our current virtualized list implementations to
remove nodes.

Enyo-DCO-1.1-Signed-Off-By: Gray Norton (gray.norton@lge.com)
ENYO-271: Fix DataList refresh after models removed while hidden

DataList doesn't refresh immediately if models are removed from its
collection when it's hidden; instead, it waits until it's shown
to refresh. However, due to a recent regression, this refresh was
not working properly (because arguments weren't being passed as
expected to an inherited method, due to a scope issue).

In addition, there was a separate issue. After models are removed
from a list's collection, we have to update the list's selection
state in case any of the removed models happen to have been
selected at the time of their removal. Previously, this selection-
state update  was being deferred along with the list's DOM refresh,
but this didn't work properly in the case where models were removed
in multiple "batches" during the time the list was hidden, because
only the last set of removed models was checked.

To fix both of these issues, we now perform the selection-state
update immediately and defer only the DOM refresh. Because we're
doing this, we no longer need to call the inherited method at
all (so didn't need to directly address the scope issue mentioned
above).

Enyo-DCO-1.1-Signed-Off-By: Gray Norton (gray.norton@lge.com)
Merge pull request #865 from enyojs/ENYO-271-graynorton

ENYO-271: Fix DataList refresh after models removed while hidden

Reviewed-By: Cole Davis (cole.davis@lge.com)
Merge pull request #862 from enyojs/ENYO-269-graynorton

ENYO-269: Add retainNode feature to enyo.Control

Reviewed-By: Cole Davis (cole.davis@lge.com)