Update TODO list.
Updated to latest Ruby.
Fix issues that prevented the thumbnail on the homepage reflecting the current state of the drawing.

This change fixed two related issues that were preventing a drawing's cache from being updated after changes were made to the drawing:

1) It seems that Paper.js redraws the canvas asynchronously, and so we must call paper.view.draw() to force a synchronous redraw before accessing the canvas's current state. We now do this by ensuring that the method responsible for updating a drawing's cache invokes paper.view.draw() before accessing the HTML canvas element's data.

2) It seems that Spine's trigger method passes an empty object in place of any default parameters. We previously bound a method with signature `_draw(element, options={persist: true})` to a Spine callback. When Spine triggered this callback, it set the option parameter to `{}` rather than allowing it to take its default value. As such, the code now defines two methods, `_draw(element)` (which is equivalent to `_draw(element, {persist: true}`) and `_drawExisting(element)` (which is equivalent to `_draw(element, {persist: false})`).
Slightly simplify some code in the canvas view model.
Fix issue whereby nodes drawn with a composite path could not be moved around the canvas correctly.

Previously, the composite path class was overriding the default behaviour of the move method such that it caused each of its members to be moved. This is problematic because a composite path is represented with a paper.js group, and we need to move the group as well as any paper.js items contained in that group.

The fix is to remove the custom move method in the composite path class and instead allow the default implementation (in the path class) to move the paper.js group. The paper.js library then handles moving the nested elements.
Generate source maps when compiling coffee script.

Note that the version of grunt-contrib-coffee that I'm currently using produces source maps with an incorrect sourceRoot attribute. Upgrading to a later version of grunt-contrib-coffee should fix this, but this seems to necessitate updating to a later version of Node and possibly other dependencies.

For now, a quick workaround was to edit node_modules/grunt-contrib-coffee/tasks/coffee.js at line 133:

     sourceRoot: appendTrailingSlash(path.relative(paths.destDir, path.dirname(file)))

becomes

	sourceRoot: ""
Refactor NodeCanvasElement: use brackets for clarity.
Fix issue whereby undoing a move would not correctly update the view.

This was caused by two underlying faults:

1) Undoing a move node (or reshape link) command would result in a change to the underlying node (link) model(s), but not an update to the view. This was because although the models were firing move and reshape events, nothing in the view model layer was registered to receive these events. This was fixed by changing NodeCanvasElement to respond to Node#move events and LinkCanvasElement to respond to Link#reshape events.

2) When running a move node (or reshape link) command in the first place, the new position of a node (or the new segments of a link) was being represented using Paper.js objects in the model layer. This is problematic because Paper.js objects are not guaranteed to serialise / deseralise consistently (segments, in particular, do not serialise / deseralise correctly). This was fixed by changing the Path (Line) classes to serialise and deseralise positions (sets of segments) to and from POJOs, which can be safely stored (e.g., in LocalStorage) by the model layer.
Refactor code relating to moving nodes and links.
Convert CanvasElement and subclasses to literate coffeescript.
Added change log.