Early draft

I'm not suggesting that we merge any of this but a PR makes it easier to discuss.
Additionally, the side effect this function has on this.error is not very nice from an immutable standpoint. Maybe you could return a tuple (isValid, errors)?