Add load fence before reading from cached barrier
Add load fence before reading from cached barrier

This removes several found races, and doesn't seem to have an impact on
latency.

It does highlight that using a client pattern for producers would allow
completely thread-local caching, which might improve performance..
however it'd do it at the expense of making the API trickier to use.

May be that a middle path is possible - expand the API later on to
allow a client pattern, but keep the current `NextFree` for general
use.

In any case, a first step in addressing issues found by go test -race

jakewins/4fq