page cache improvements:
    - moved flags down
    - added flag for not updating page access stats and added test
Fix rare race condition in Forseti lock manager

When doing a release-all on a forseti lock client which held one or more
upgraded exclusive locks (eg it originally held a shared lock and then
upgraded it), if another thread acquired a shared lock right when the client
was releasing its exclusive lock, the client could end up in a bad state.

This resolves this race by discarding references to local shared locks if they
have been upgrade when we do a release-all on every lock the client holds.
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 #2682 from steps/master

page cache improvements:
Merge remote-tracking branch 'origin/master'
Merge pull request #2680 from jakewins/2.2-marshland

Introduces MarshlandPool
Fix state bug from upgrading a shared lock using tryExclusive()

If a shared lock is held when sharedExclusive was called, the local lock
state in the client would not be updated properly, instead the call would
return early from this code path. It should have continued the loop to acquire
locks, and it should have updated the local lock map state.

Now it does, this appears to have been a copy-paste error.