GROOVY-6354 Allow addCopyWith for @Immutable annotation

JIRA: http://jira.codehaus.org/browse/GROOVY-6354
LIST: http://groovy.329449.n5.nabble.com/Add-Withers-to-Immutable-td5716924.html

This Additional AST transform option for Immutable takes this:

```groovy
@groovy.transform.Immutable( addCopyWith=true )
class Person {
    String first, last
}
```

And generates a method:

```groovy
final public Person copyWith(java.util.Map map) {
    java.lang.Boolean dirty = false
    java.util.Map<K extends java.lang.Object, V extends java.lang.Object> construct = new java.util.LinkedHashMap<K extends java.lang.Object, V extends java.lang.Object>()
    for (java.lang.reflect.Field field : Person.getDeclaredFields()) {
        if (!(field.isSynthetic())) {
            java.lang.Object newValue = map.get(field.getName())
            java.lang.Object value = Person.getMethod('get' + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1)).invoke( this )
            if ( newValue != null && newValue != value ) {
                dirty = true
                value = newValue 
            }
            construct.put(field.getName(), value)
        }
    }
    return dirty == true ? new Person(construct) : this 
}
```

I am (obviously) in no way precious about any of the nomenclature, and this is my first big Java based AST transform, so if anyone spots where I'm doing it wrong, can they let me know?