Added required fields and unique fields

Playing around with a builder originally thought up by CLoew but going
about it slightly differently.