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:
This seems like quite a leap of faith to me (to assume if it's not an array then it's definitely an object an one with a `toArray` function.

Looking through the class, there's the `getOptions` function, though this is an incredibly complex function which handles too much responsibility and gives a far too complex array back.

Perhaps this source -> array work could be split out and put on a common parent class, rather than the complex logic being used everywhere...

Or we just say that source objects have to have `toArray` methods to be valid sources (duck typing FTW). If so, then you need to check it's an object and not that it isn't an array