DefaultImageCanvas: remove unnecessary logic

No need to check for null context; all that really matters
is whether the eventService is null.
DefaultImageDisplay: initialize ImageCanvas lazily

This is needed because the DefaultImageDisplay constructor
does not yet have a context, and we will need to inject the
context into the ImageCanvas.
DefaultImageCanvas: inject application context

This fixes panning and zooming.

This should have done as part of the 'service-parameters' context
injection work (dd0cf68e6a517a07012036df0bffa24ab6790032).

Consequently, the ImageCanvas did not know the context and thus
could not publish events when e.g. pan and zoom operations occurred.
Merge branch 'fix-zoom'

This branch fixes panning and zooming, which has been broken since the
'service-parameters' merge (dd0cf68e6a517a07012036df0bffa24ab6790032).
WidgetModel: lean on MiscUtils.equal method
AbstractJHotDrawAdapter: compare objects safely

Previously, an NPE was thrown if the prior attribute value was null.