validate

Values are initialized eagerly, but objects are not, so be sure to "touch" this class on initialization for failing fast.

We can also add some smarter validation here later if needed