Create view classes.

Adds support for allowing any calendar data to be displayed in different views. Only the classic grid view is currently implemented (which is broken down into lots of small method so the class can be extended to add small variations).