NOTE: Local listeners are now called on the parent widget instead of the child!
It makes more sense to use a listener to listen for additions/removes in a certain
widget, than listening to when a specific widget is added/removed anywhere.
- Moved the type code our from TBWidget to new TBTypedObject.
- Work with template generated unique class id, instead of using strcmp on class names.
- Use template functions similar to dynamic_cast.
- Added unit tests.