FEATURE: make form field an abstract class and add validation to subclasses

This PR looks to implement a TODO which was in FormField.php. The initial reasoning for my code was to add validation to DropdownField to ensure that the passed in value was something which is available in the options provided. Then I went a little bit further...

There are multiple instances of validation being handled in the setValue() function of the field (e.g. https://github.com/silverstripe/silverstripe-framework/blob/3.1/forms/ListboxField.php#L208 and https://github.com/silverstripe/silverstripe-framework/blob/3.1/forms/CurrencyField.php#L18) rather than in the validate function. I'm not 100% sure that these should be pulled out to the validate functionality - if so I'm happy to do so as part of this PR or another.

If this is a path which we wish to take I'm happy to go through and add validators to every `FormField` instance which I can find and clean up the docblocks on the remaining items as well - thought it would be better to get some feedback at this stage of the PR rather than doing it all and being denied. Saying that, this PR is merge able and an improvement to the core so I think that it fits the contributing guidelines :smile:
I agree, there are a couple of leaps of faith being made. There are definitely functions in each of these instances which are doing far too much work and as you noted, providing extremely complicated arrays for templating. Each of them is slightly different as well, so providing a common structure would be a great addition. Adding `getOptions` to `DropdownField` is also something which I think should be in core as there have been quite a few times when I've wanted the functionality in a template - this could then be used to merge further down the chain for other fields which need more options.

Setting a common way of getting the source options as an array make sense for these fields. I could create the functionality for converting all sources to arrays and then later we can work on refactoring some of the ungainly getOptions functionality in another PR. Let me know if that suits.

Currently I'm assuming that the source array is either `array` or `ArrayAccess` (which also isn't documented very well) so we can solve that problem with a simple foreach loop.