Changed TryPeek to handle race condition with Dequeue.

**Problem:** Dequeue sets the head.Value to its default. When TryPeek is interrupted in the process of retrieving the value some times Dequeue sets the value to its default. 
**Fix:** TryPeek now checks the head has not been changed before returning the value.