Simplifications and fixes

Replaced deque by a queue (which by default uses a deque).
Simplified the task packaging as suggested by Ang3lus in issue #4.
The destructor now waits for the queue to empty but throws
a std::runtime_error if enqueue is called on the stopped pool
(see issue #3).