Finished the GUI to allow editing without XML

Work still to be done:
Integration tests with AI
Drag and Drop/Reordering
AI restricted use
This can raise a `UnicodeDecodeError` for certain bytestring values:
```
>>> unicode("\x99")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x99 in position 0: ordinal not in range(128)
```

What is this code trying to accomplish?  According to the docstring, `xml` should already be `unicode` by the time it's passed into the function.