Validation of schema themselves

I've had a stab at implementing up-front validation of schema in a `Validator` object, as opposed to throwing errors during validation of actual data, as per issue #39. It required splitting out the core validation logic into a `ValidatorBase` class which the user-facing `Validator` then delegates to for some of it's schema validation.