Merge pull request #69 from kfl/canvas

First cut at an API for Canvas
Remove the use of `Data.Aeson.Generic` and use GHC Generics instead.