Better parsing of args + cleanup

The current situation: 
* keeping track of what args are available/required by each field is not easy. Relies on wiki being up to date.
* Some args are available to all fields, some are a specific to individual fields. Need to keep track of this too. 
* Also - there aren't enough checks in place - so its easy to miss required args and use unsupported args.
* In the future it would be nice for more things to be customisabile - all strings for example. I think it would be best to specify these in a list of default args for each field.

This PR is a general cleanup of the whole field args situation.

* Abstract class has an array of generic args available to all fields.
* Each field can then provide field specific args.
* When instantiating a class - use wp_parse_args
* Fire deprecated notice if using args that are not supported - to avoid confusion.
* Removal and cleanup of args. Some are old. Some are just mapped to another value. Remove a lot of the need for checking whether args are set

The only think i'm not so sure about is that deprecated notices are fired - whilst it won't break anything it  could potentially cause annoyance with custom field types etc. Might be easier to remove this.

I'm going to do some further testing to ensure that this isn't breaking anything.
cmb_field_description? Yeah that would make sense. Can't really think what it could break - any custom fields shuld be using this method to output the description.