Bug 167323 [Viewers]Open AbstractTreeViewer for external widget implementors
As reported by Ross Camara AbstractTreeViewer would work for nebula if we would open the API a bit. Boris and I decided that we will do this in 2 steps: 1. open the API 2. moving the Virtual-Support bits from TreeViewer to AbstractTreeViewer when the nebula grid provides virtual support.
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java
* proper support for multiple equal elements.
	 * </p>
	 * 
	 * @param elementsOrPaths
	 *            the elements or element paths to remove
	 * @since 3.1
	 */
	protected void internalRemove(Object[] elementsOrPaths) {
		Object input = getInput();
		
		
		CustomHashtable parentItems = new CustomHashtable(5);
		for (int i = 0; i < elementsOrPaths.length; ++i) {
			Object element = elementsOrPaths[i];
			if (equals(element, input)) {
				setInput(null);
				return;
			}
			Widget[] childItems = internalFindItems(element);
			for (int j = 0; j < childItems.length; j++) {
				Widget childItem = childItems[j];
				if (childItem instanceof Item) {
					Item parentItem = getParentItem((Item) childItem);
					if (parentItem != null) {
						parentItems.put(parentItem, parentItem);
					}
					disassociate((Item) childItem);
					childItem.dispose();
				}
			}