(PUP-3038) Cache search_directories

combined with #2951 performance gains are simply too good to ignore

same reasoning - installing new module or gem is rare-enough event to require a server reload

i'm not an expert in puppet codebase, maybe this diff can be done in safer way - there must be places where cache invalidation is enough to avoid server reloads.