Improves the mechanism of rendering widgets.

This commit adds more delegate methods to call when rendering a widget view in a refresh cycle.

The `Widget::WidgetWillRender()` and `Widget::WidgetDidRender()` methods are replaced by `Widget::WidgetViewWillRender()` and `Widget::WidgetViewDidRender()`, respectively. Both are called as long as a widget is attached to a widget view, no matter it will be rendered or not.

The original `Widget::WidgetWillRender()` and `Widget::WidgetDidRender()` methods now have new meanings. `Widget::WidgetWillRender()` is called right before the widget is about to render, so it won't get called if the widget is not visible on screen. Further, context transformation made in this method applies to all of it children now. The `Widget::WidgetDidRender()` method is called right after all of the widget's children finished rendering, which makes it a good place to restore changed context state.

The `WidgetView` itself now also has `ViewWillRender()` and `ViewDidRender()` methods with the same purpose of widget's `WidgetViewWillRender()` and `WidgetViewDidRender()` methods.

The variable name of the root widget of `WidgetView` is renamed from `widget_` to `root_widget_` to improve code clarity. The accessor to the root widget is removed as well because some attributes such as the dimension should never be changed.

This commit also fixes the bug that `OpenGLViewController` doesn't update the managed OpenGLView in a refresh cycle, which may causes problems in some situation.