Refactor the reading of layouts

Move layout reading into its own class (LayoutReader) and use the new
class to populate the layout hash that's used in the site.
Extract the filtering of entries into its own class
Move the tests for filtering entries.

They get their own test case instead of being embedded in the site.
Remove unneeded instance variable
Move the requires to the proper place
Use the new EntryFilter class to filter entries

Kills a ton of duplication.
Allow nested subdirectories in the layouts folder

This is pull request #1622 implemented in this branch