original version of an array based lock free queue
added support for single producer through LOCK_FREE_Q_SINGLE_PRODUCER #define