Added actual PAM module, updated docs, and made a few minor fixes

Once this is merged, I'll be ready to make an alpha release.
I'm almost 100% certain the test won't be flaky, because the time is completely mocked. There's no external state I'm aware of to cause the test to pass sometimes and not others. If there is flakiness, it's a bug in the actual code.

I don't think there needs to be a change, but if I did add a threshold, where would you want it? Did you mean in CacheTestAddMockTime or the AssertAction* functions?