Improves widget to better interact with its parent or children.

This commit implements three new minor features for the `Widget` class to better handle its child widgets.

First, a new `BringChildToFront()` method is added for moving the specified child widget so it appears on top of its siblings.

Second, a new `RemoveFromParent()` method is added for unlinking the widget from its parent and removing from the responder chain.

Last, a new `frees_descendants_on_destruction_` property is added. If this value is set to `true`. All of the widget's descendants will be freed automatically when executing its destructor.