Did a ton of work relating to moving window creation to JavaScript, in
preparation for a proper whitelist/blacklist for widget parenting.

Already works for the most part:
Widget registration can now have an additional argument, a string array
containing children to allow or block.

Usage case:
["*", "!tab"] - Allows all widgets as children except tab.
["*"] - Allows all widgets as children
["tab"] - ONLY allows tab as a child.
Fixed a couple of window-related glitches.
Made windows appendable.