Loosen/improve AtomicFlag semantics.

In particular don't attach to construction thread, the requirement
was I think trying to articulate that it doesn't make sense to call
Set() from different threads as it's then not clear which thread
IsSet() is memory consistent with.

But:
 1) What's required is *sequence* not *thread* checking.
 2) Calls to Set() need to be sequenced w.r.t. to each other, but not
    with respect to construction (AtomicFlag is not modified before Set()).

Update restrictions to reflect that and update comments to reflect the
guarantees provided by them + its usage of atomics/barriers.

Also expose UnsafeReset() outside of "testing", it will be used in
https://codereview.chromium.org/2135413003/.

BUG=629716

Review-Url: https://codereview.chromium.org/2187333002
Cr-Commit-Position: refs/heads/master@{#409020}
3 files changed