Change Field process() to 4-argument form

Process now gets all the different types of data, giving fields much
more flexibility in controlling how data is processed and coerced, and
paving the way for accepting json-based data, etc.

This is a huge, very breaking change. This will cause a number of tests
to break until we can solve the issues contained within.