Flesh out widget lifecycle and enhance widgets.register

* Widget lifecyle methods of create, inserted and removed
* Returns from lifecycle methods promise aware
* Allow generational inheritance for base in registration
* Flesh out unit tests for _Widget and widgets