Wip sharded threadpool

This is a pull request for sharded thread-pool.
You should not be calling get_pgid() in its current form here.  It reference PG::info internally which is not safe to access without the pg_lock.  Your choices are to:
1) Require the user to pass in the ps() value along with the PG to queue
2) Change get_pgid() to reference a const PG field set during the constructor.

2 is probably much simpler and more useful.

Also, get_pgid() should be const.