Refactor forms into module

Makes it a bit easier to read by splitting fields and widgets into their own files.

Also, introduce a NumberField, which is just like an IntegerField, except it uses an HTML 5 number input, that way we don't have to add type="number" to each integer field in the template layer anymore.