Enforce max words on backend

- also fixes the counting bug; snaps weren't incrementing the word
  count because the word was set to snapped before being added, and was
  therefore considered a duplicate