Code refactoring.

This commit does code refactoring at various aspects.

The image generated by `nvgCreateImageSnapshot()` does not flip vertically anymore because this operation is expensive. Instead, it adds the `NVG_IMAGE_FLIPY` flag to `nvgCreateImageRGBA()` to achieve the same effect.

Setter methods of `Label`, `PageControl`, `ProgressView` and `Widget` classes are changed to request for redraw whenever necessary, and setters for setting color is changed to use the `NVGcolor` type for parameters directly.

The `Label` class also adjusts the vertical offset to draw the text box in some situations. This is a workaround to make the rendered position of the text more as expected.

In addition, the `ProgressView` class does not render the track or bar if the corresponded color is set to transparent.
Implements the `Button` widget.

This commits implements a new `Button` class inherited from the `Control` class. The ability to bind render functions and render for different states are moved from the `Control` class to the `Button` class as well. This makes the `Control` class as a base class for all control widgets.

A new style for rendering the default highlighted state is added. Now there are two flavors to choose and can be set through `set_default_highlighted_style()`.

In addition to render states for a button, the button also has a managed title label for displaying text. The text and color of the label can be set for each state separately.

In order to make it easier to customize the button. The `Button` class also has `rendering_offset_` and `title_edge_insets_` properties for changing the position of rendering and title label.