Adding ftime.Pause(ticks int64)

This function will not return until the value returned by
ftime.Counter() has increased by at least ticks. This method does not
cause the current thread/goroutine to be descheduled and can be used to
halt execution for potentially much shorter periods of time than
time.Sleep().
padded.CacheLineBytes is now public

Because it is proving useful in the queue/spscq package to know the size
of a cacheline this constant is now public.
Failed read/writes now call ftime.Pause(...)

The constructor function for each queue now takes a 'pause' parameter to
allow the number of pausing ticks to be tuned.

When the reader or writer fails it implies that there is an imbalance in
the speed between the two ends of the queue. For instance if the reading
goroutine outpaces the writer the queue will quickly empty and the
reader will repeatedly fail. This effect is exacerbated by the fact that
the failing reader will poll the queue even faster because there is no
work to do between polls.

The result is to have the failing reader/writer attempt to update its
'readCache' or 'writeCache' field at a very rapid rate. This causes the
cacheline of the actual 'read' or 'write' field to be owned, for
reading, by the rapidly polling goroutine. This will further slow down
the slower goroutine, making the problem worse

The solution is to make the failing goroutine wait after each failure,
allowing the slower partner to catch up. We use the ftime.Pause(...)
function to avoid putting the goroutine to sleep, which may cause
erratic latencies.