Refactor to have a reusable form type

This change is inspired by Symfony Form Types. (http://symfony.com/doc/current/book/forms.html#creating-form-classes) It will also make it easier to implement the Symfony Form Component. 

And it's a step closer to thin controllers.

Do you have feedback on it? If it receives positive reactions, I'll implement it in other modules too.