Implement a new strategy for fingerprint tracking.

The server now discards any userId the client may send us (we already
calculated this server-side anyway, and just verified (uselessly) that
the two values matched. Now the server replies to a successful post
with the client's userId ("fingerprint"), and the client stores up to
20 of the latest fingerprints they've sent in localStorage. They use
this list to determine if a message is their own (and should therefore
have a mute button).

This should fix many problematic cases, including:
  - Changing wifi networks frequently
  - Crazy airport/school proxies that forward each successive request
    through a different external IP
  - China (probably not, but it's nice to dream)

TL;DR: NO MORE INVALID FINGERPRINT ERRORS YAY!