adds orNull to a contract, allowing a specific contract to specify that ...

...one of its accepted values is null, instead of hard-coding this definition of a missing value.

I took a stab at this.  What do we think of this approach?  i.e. let the contract define isMissing, and orNull lets you specify that a particular contract also allows null.

@gmarceau @jonahkagan