Fixes View::Redraw() for Mac and iOS.

The `View::Redraw()` method should guarantee the view will be updated in the next refresh cycle of the display. However, if `Redraw()` is called in widget's rendering-related methods, the corresponded widget view won't update one more time.

This commmit adds a `_needsRedraw` property to native OpenGL views to make sure the display link won't be deattached when received a redraw request.
Improves widget's rendering mechanism.

This commit changes the mechanism of how a `WidgetView` object renders its belonged widgets. `WidgetView::Render()` now determines which widgets are visible on the screen and populates a widget list for them in rendering order.

`WidgetView::PopulateWidgetList()` is added to populate the widget list. It not only excludes invisible widgets in the current rendering cycle, but also determines the widget's origin and scissor area related to the widget view's origin.

To simplify the rendering process. `Widget::RenderOffscreen()` is removed and replaced by the existing `Widget::WidgetWillRender()` method, and `WidgetView::Render()` does not call `Widget::UpdateContent()` every time anymore.

In addition, a new `Widget::WidgetDidRender()` method is added to notify widgets that the current rendering process is done.