Refactor ICanvas to remove some duplication

Mostly using default parameters to reduce the number of
overloads on some methods and improving documentation
on others.
Finish implementation of Canvas and Colour

Adds support for encoding colours into a string with control codes. Not much API
support right now for easily writing strings with colouring.

There's basic support in Color. ex.
    IColor blueCol = new Color(TCODColor.blue);
    string colorEncoded = "A" + blueCol.ForegroundCode() + "blue" + blueCol.DefaultColorCode() + "string";

It's not very pretty right now though.
Fix Widget for compiling.
Fix a compiler error in Size.

Can't write to a read-only property.