Query logic moved to CanvasView, introduced CanvasElement

Element bounds are calculated on view side in CanvasElement, based on
shape that's drawn on the screen. Reason for the change is that
dimensions stored in model don't have to be related to rendered
element's bounds, and some model elements might not even have physical
dimensions yet they're rendered and therefore have bounds.