give an upper limit to the refcnt garbage collector's threshold

if creating a huge cache there is no point in raising the threshold after a certain limit.
In theory the threshold value might be a constant and not depend on the cache size at all
don't try stopping the expirer thread if it wasn't started

shardcache_destory() might be called also if something fails during the initialization
phase (so from shardcache_create()) this means that the expirer thread might not have been
created yet and so we shouldn't try canceling/joining