Be more liberal in which inputs we accept, be more concrete about what require=True means.

If a field isn't required, you shouldn't have to pass it in.

If a field is required, but it has an empty value, that should be an error.

Pulled the first commit from #150 into this, which was necessary.