Optimization for sweeper creation loop

cache_no_expire is a global flag, if it's set, return without further
check when trying to create sweepers.
Only allocate one sweeper thread

Thread is not cheap on Linux since it involves context switch in the
kernel. And allocating multiple threads is not necessary even on SMP
since the granularity of time is second.
Only scan cached items when there is expired one

This is an optimization for the sweeper algorithm. By remembering
the least expiration time, we can determine whether we need to go
over all items in a cache store. If we have to, we find the new
least expiration time by examining those that are not expired yet.