add serial numbers to team data objects

This will permit the JavaScript to pull team data and know whether or not
it has been changed on the server side. This is part of the fix for #15.
first (failed) attempt at using dataSerial in js

This didn't work, because multiple put requests can be fired off
in rapid succession. See issue #19.
start suppressing double calls to putTeamData()

These are when a single user action results in two or more calls to
putTeamData() in rapid succession. This is a bad situation, because
it could result in overwriting data on the server even though the
client side data is actually older. Error handling was added to catch
and abort these calls, and suppressTeamUpdate()/unsuppressTeamUpdate()
were added to allow explicit suppression and unsuppression. These two
functions are used by things like status button handlers to suppress
updates caused by changing other fields programmatically (is that even
necessary?)
Implement "dirty flag" on team data

Instead of directly firing put requests when team data is updated, set a dirty
flag. An interval function that runs every 250ms checks this flag, and fires
a put request if needed. This still isn't quite 100% perfect from a race
condition perspective, but it's a lot closer...