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.
No reason other than limiting the size of the commit. I figured I'll get this in, and then I can swap over existing users of FlyweightPool to the LinkedQueuePool. I think there are quite few users though, so I can go ahead and include that shift over in this PR.