Add entity class and interface

I can remove tests from the PR if they make it too big, but I think they may help show the entity methods in action.

The real focus of scrutiny on this PR really should be in the page class and the migration for the table setup.

1. Outstanding issue to figure out: How to enforce unique "route" names.
This matches all 30 special characters we do not want in URLs.

"preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred."
So !preg_match should be fine. 

Checking for no route is there simply to prevent getting this error when loading the ACP page for example, because this will evaluate to true if the route is empty... In other words, this check only needs to be run when there is content to check, and that's why it's in the expression.