EZP-20193: Spi persistence cache using Stash

This PR adds Persistence cache (aka "StorageEngine" cache) as a layer above the storage engine using a caching library called Stash which supports both APC, memcache(d) and others.

Note: To test this on a site, checkout the cache branch in ezpublish-community repo.

The benefit of doing this caching at this layer is that you don't have to care about permissions and can easily have one big pool of cache for all users, witch makes it much more memory efficient.

TODO:
- [x] Persistence factory to lazy load the "inner" persistence handler, aka storage engine*
- Cache:
 - [x] Section
 - [x] Content Type (published)
 - [x] Location
 - [x] Locations ( loadLocationsByContent() as used by limitations )
 - [x] Language
 - [x] Content (published)
 - [x] Content Info (published)
 - [x] Role(Assignments) (loadRole & loadRoleAssignmentsByGroup as used by permission system)
 - [x] UrlALias ( lookup(), listURLAliasesForLocation() & loadUrlAlias() )
- Refactoring to improve cache efficiency:
 - [x] Remove unused SPI Location->mainLocationId to avoid aggressive cache clearing on location changes 
 - [x] Change  RoleAssignment->role to ->roleId to avoid having to swap value for id in cache system
- [x] SPI logger to profile if other parts should be cached
- [x] Legacy integration (Clearing cache on changes in legacy when there is an event for it, otherwise have low ttl and document)
- [x] Change setup wizard to generate Multisite safe default config (APC if available, or dev/null if not)
- [x] Doc (in issue)

TODO's for another time:
- Add requirement to Persistence field type values that their ->value *must* be serializable (see current work-around for DOM object's)
- Relations Cache
- ObjectState(Group)  ( loadAllGroups(), loadObjectStates(), getContentState() as used by limitations) cache
- UrlWildcard Cache

\* This has the benefit of solving our issue with database connection being openend when repository is loaded. .