fix data races and have travis check for them in the future

Closes #54 and #84. Ran `make testrace` > 20 times locally without seeing any more races.
There's a slight chance that once in a blue moon we'll see a random failure because of IsTrueWithin() failing, but there are easy remedies for that.