Use delay instead of debounce as this causes less corruption.
Clear line inline and set colours;

Seems to reduce corruption.
Interface DSL allows blocks to be passed to y and x;

If an interface (a) is using the 'use' directive, then if the interface (b) it is using changes geometry then the values (a) is using will be outdated. By using blocks, we can evaluate at call time, leading to less display corruption.
Handle centred interface geometry better;

We cannot use top and left in viewport_height and viewport_width respectively, as their values depend on the current viewport size which will change if the terminal is resized.

x, y, height and width are now pretty much reserved for holding the values the client wanted to use, but should not be used to do any rendering.
No need to clear on line, or add colour. Paranoia.
Move API::Interface#colour in API::Helpers;

This is to reduce duplication. Also added some more documentation.
I can't cover these parts with tests.
Tidy up;

- Add placeholder @param and @return Yardoc tags.
- Add more tests.
- Add space around top and bottom of classes.
Add more documentation.
Extracting Event from Events.
Refactor Event.
Refactor Events to not know about the event itself.