reorganize data binder logic

move white list and black list checking up earlier in the process
better separate the handling of indexed properties
only retrieve the metaProperty once
GRAILS-4643 - support binding a command object to a domain class
GRAILS-4643 - use a BeanMap instead of retrieving obj.properties for the RHS of data binding
don't retrieve the value from the binding Map until/unless it is needed

Using Map.each { key, value -> … was retrieving every value from the Map, even those that aren't needed.  For normal Maps this isn't an issue but to optimize the use of BeanMap (and potentially other lazy Map types) this change defers retrieving the value from the Map until/unless it is needed.