Add level editor; plus miscellaneous other changes and refactoring

Level editor
  Implemented! Current functionality:
  - Tools to create circular tracks and linear tracks

  - Tool to select and move around tracks

  - A toggleable grid that allows the level designer to position the
    tracks on the grid (grid size can't be changed yet)

  - Menu buttons specifically for the level editor
      - The current tool's button is highlighted by a white border

  - Circular tracks get shaded when the mouse hovers over them
      - Only during the select tool or the tool to create linear tracks

Level loader
  - Values of track positions are rounded to 1 decimal point

Other game-specific changes
  - New game feature: if shift is pressed, all clicker circles are shown

  - Add an array, game.clicked_tracks, to hold references to tracks that
    have been clicked in the current frame
      - this involves creating a click event for circular tracks
        (to record the clicked track in the array)
      - this also involves emptying the array before each game frame

  - Add a flag, game.hide_trains, to denote that trains should be hidden
    - trains will not be drawn OR updated if game.hide_trains is true

  - Create a game menu object

  - Create a menu button object; change buttons to be instances of it

  - Rewrite the linear track drawing method (in tracks.js) to be more
    readable and to fix a small appearance snafu (white stuff along the
    edges of darkened tracks)

Game engine changes (non-game-specific)
  - Add click events for the Game object; i.e. game.onclick(callback)

  - Add GameObject.destroy()
    - Note: this does not destroy the object on a low-level. It simply
      sets the flag GameObject.destroyed to true, and removes it from
      the global game.objects array.

  - Clicks on objects are ignored if:
    (a) they aren't global, and
    (b) they aren't in the current level

New utility methods
  drawing.js
  - Added emptyRect

  math2D.js
  - Added distanceFromLine(p, pos1, pos2)
  - Added snapToGrid(v, gridsize)