Introduces MarshlandPool

- Marshland pool uses "puddles", local per-thread pools, to avoid pool
  contention. It delegates to a global pool when the local pool is not
  sufficient.
- Renames FlyweightPool -> LinkedQueuePool
- Consolidates pools under the Pool<> interface
- Remaining work: Have marshland pool store more than one local object per
  thread, using for instance a linked list.
Merge pull request #2680 from jakewins/2.2-marshland

Introduces MarshlandPool