3.0 extract schema cache

Moves the caching logic in Schema\Collection to another object. This makes injecting custom schema objects easier, for example when using the database layer without the rest of CakePHP. This was the last blocker I found for extracting the Database namespace into its own repo.