Move validation and count/depth increment to _build function

Instead of littering it throughout every other function, validation
is done at the generic build level.
Remove type_constraints, use column.type to determine operator set

This significantly streamlines the setup required to make a builder,
since the type is inspected from the sqlalchemy column object and
appropriate operators are selected from there.

Given the validation that's been trimmed, nullable validation seemed
an odd one to keep so it's gone, and the column builders have been
streamlined - to the point where it's only worth keeping individual
column builders because I know I'll be adding more types (bool, float)
in the future.