Add tower delete button to the canvas

It's not really a button; the player should drag and drop onto the
'button' to delete a tower.
Make Enemies shoot back to the towers

Although the current behavior of the enemies is just to shoot at
random direction, the towers can get killed.
Add game score and credits variable to game state

Also added a display window to show current score and credits status.

The score and credits are subject to game state serialization, which
means you can continue from the last session.
Make purchasing a tower costs credits

If the player is out of credits, he can not purchase new tower.
The cost is 100 credits for now.
Add tower's health value to target of serialization

Also moved serialization logic to Tower's method.  It's better way to
do in terms of object-oriented design.
Show hint to tower buy button when the mouse pointer hovers over it

The cost of a new tower increases as the number of existing towers
increases, which makes it difficult to have so many towers at a given
time.
Fix a bug the game tries to reload when the last tower is destroyed

The game must defer initialization of game state after the constructor
was finished because the calling logic can assign event handlers for
object creation.  The game has assumed it's not yet initialized if
towers array is empty, but that case can also happen when the enemy
shoots out the last tower.  So we should properly have a dedicated
flag to indicate that the game requires initialization on the first
invocation of update().
Prevent Towers from getting too near each other

If the player drags a tower near another tower too close, the dragged
one is repeled away to keep distance.
Introduce common base class for Tower and Enemy
Introduce level and experience property to Tower

Experienced Tower has durable health and live longer.
Make Tower shot Bullets' damage be affected by the Tower's level
Make the game become gradually difficult as more score is gained

It's not really making the game difficult by adding so many weak
enemies.