Zoom and pan controls for user programs
Zoom and pan controls for user programs

This commit adds zoom and pan controls for user animations, simulations, and interactions.  When any zoom or pan is in effect, a reset button is offered to return to the default view.

The panning layer is a special control that eats all mouse events, so there are special concerns.  It must always be the first control in the control list, since events are delivered to controls in reverse order.  It is only enabled when the program is paused for interactions, since otherwise it would block mouse events to the program itself.

Zooming and panning interact in interesting ways.  Specifically, panning while zoomed has to take the current zoom factor into account.
google/codeworld,alphalambda/codeworld,google/codeworld,google/codeworld,pranjaltale16/codeworld,alphalambda/codeworld,pranjaltale16/codeworld,alphalambda/codeworld,pranjaltale16/codeworld