Add support for bounded STP work queue

Added a configuration property (MaxQueueLength) that can be used to
enforce an upper-bound on the size of the workItemsQueue.

If the property value is null (default), no upper bound is enforced.

Queue limits configured on a pool will be ignored by WorkItemsGroups that
use that pool (i.e. limits are only applied to QueueWorkItem() calls on
SmartThreadPool instances).
Allow for pending scaling when checking limit

When checking the queue limit, don't reject items if the pool is going to
scale up (i.e. it hasn't reached its max threads). This means the queue
limit bends a little bit (and is essentially the configured limit +
potential available threads).