Rewrite code impementing widget tree model.

The code now uses a set of _WidgetNode objects which mirror the
document widgets. A recursive synchronisation method is used to make
the model reflect the document. The view is properly informed to added,
deleted and moved widgets.

Fixes bug:

Veusz version: 1.21.1
Python version: 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)]
Python platform: win32
Numpy version: 1.8.0
Qt version: 4.8.5
PyQt version: 4.10.3
SIP version: 4.15.3
Date: Wed, 01 Oct 2014 09:24:41 +0000

Traceback (most recent call last):
  File "C:\src\veusz-msvc\veusz\build\veusz_windows_pyinst\out00-PYZ.pyz\veusz.windows.widgettree", line 119, in setData
  File "C:\src\veusz-msvc\veusz\build\veusz_windows_pyinst\out00-PYZ.pyz\veusz.document.doc", line 191, in applyOperation
  File "C:\src\veusz-msvc\veusz\build\veusz_windows_pyinst\out00-PYZ.pyz\veusz.document.operations", line 184, in do
  File "C:\src\veusz-msvc\veusz\build\veusz_windows_pyinst\out00-PYZ.pyz\veusz.document.doc", line 261, in resolveFullWidgetPath
AssertionError

What the user was doing before the crash
----------------------------------------
Hi,

This might be related to my last bug...

1. Start a new document.
2. Add a new page ("page2").
3. Select "page1".
4. Click on the "Remove the selected widget" button.
5. Press the "F2" key.
6. Click on "page2" in the edit window.

I tried it a couple of times and got the exception all the time.