Threadpool can split a thread
When a task returns SPLIT, a new task is queued again at the same point,
while the thread continues in the pipeline. This is useful to check if
there is no additional events in the block we just left.

AtomicQueue::Poll() now returns an empty pointer if there is no element
in the queue.
A queued pipeline will now start at the beginning.
'index' parameter of specialized ThreadPool::Queue<chain_t> is suppressed.
Clean code
Refactor FrameObject