Upgrade Waypoints, clean up destroy/remove chaining
Merge pull request #192 from imakewebthings/waypoint-cleanup

Upgrade Waypoints, clean up destroy/remove chaining
Add "title" attribute to images so you can differentiate blackscreen bros or non-face shots
Merge pull request #193 from brycebaril/master

Add "title" attribute to images
Add a middleware that checks API user validity.

This fixes an issue where a user could bypass fingerprint checks
if they were to specify an invalid API key but a valid CSRF token.
Check fingerprint length for web clients.

This helps prevent malicious web clients (outside of the browser)
from being able to generate MD5 collisions to impersonate other
clients' fingerprints.
Update gumHelper to the version that doesn't time out by default. Fixes #80
Merge pull request #194 from sole/update-gum-helper-no-timeout

Update gumHelper to the version that doesn't time out by default.
Add an early return when fingerprint validation fails.
Fix websocket client fingerprint/userId calculation.

Websocket clients' userIds were being copied directly from their
fingerprints, rather than being calculated as a combination of
fingerprint and IP address (like the web clients). This is fine if
we assume that a client will be only a websocket client or only an
HTTP client, but this is not actually the case (see: mobile
clients).

This fix determines the IP of websockets when they connect, then
performs the same calculation as for HTTP clients on each message.

NOTE: This will cause a fingerprint change for clients that are
using websockets, so if they were muted they will become unmuted.
This will also cause the previously "readable" bot fingerprints
(e.g. meatmonsters) to become unreadable, although they will still
be unique per bot as long as different fingerprints are still
given.
Ensure browsers don't use a cached copy of /ip.