Refactor to support customized FormTypes with extra information

Some FormTypes (e.g. DateFormType and EnumFormType) need to populate extra information (DatePattern and EnumValues). However, the FormTypes checks the name of FormType with hard code. This is inconvenient if the user want to add a new customized FormType with extra information.

I've refactored the FormTypes to eliminate the hard code checking of FormType name and moved the logic of processing extra information to DateFormType and EnumFormType.