Feature: IDirtyable/Dirty Properties

This implements a version of dirtyness that is maintainable and easy to use. The responsibility to decide what is dirty lays with the implementer, and thus allows for more general code.

See [feature/IDirtyable in Sample-Dash-Game](https://github.com/Circular-Studios/Sample-Dash-Game/tree/feature/IDirtyable).