Add queue implimentation and tests