This is a set of drawing primitives that Widgets can use to help offset some harder work
that would require a lot of code. This includes things like drawing a background, filling
a space, rendering text, and so on.
Properties is the store that each Widget uses to define its behavior, using a HashMap to
store the properties. Each property is identified by a numeric (u32) key.
This is the Widget trait that all drawable Widgets use. Any special functionality should
be defined using interactions with properties. Widgets can decide whether or not to set
themselves in invalidated state after a property value changes, which indicates to the
top-level drawing loop whether or not a Widget needs to be redrawn.