Added concurrent tests for spscq.commonQ

The concurrent tests mimic the sequential tests, but where the
write/read parts are executed in separate goroutines.

We had to remove all reads of 'read' fields from the test*Write(...) and
reads of 'write' fields from the test*Read(...) functions.

We introduced a pair of helper functions which copy a commonQ struct
without copying unreadable fields, i.e. the copyForWrite(...) does not
copy 'read' fields and the copyForRead(...) does not copy 'write'
fields.

The reason this level of care is needed is that the algorithms used
assume that the reader will only read and write the 'read' fields (with
the exception of updating the writeCache) and the writer will only read
and write the 'write' fields (with the exception of updating the
readCache). Adding large numbers of unexpected reads into the tests will
add unrealistic serialisation on CPU architectures like AMD64, x86 etc.
which could mask bugs.