UP-4177 Add groovy-based duplication of username to user.login.id and uid if not present

https://issues.jasig.org/browse/UP-4177

Upgrades to person-directory 1.6.0 to enable groovy-based scripts or classes in personDirectoryContext.  See https://github.com/Jasig/person-directory/blob/person-directory-parent-1.6.0/person-directory-impl/src/main/java/org/jasig/services/persondir/support/GroovyPersonAttributeDao.java#L38

Though could be done with PersonDirectory's StringFormatAttributeRule, this approach is MUCH GROOVIER!

Additional benefits to uPortal:
- uportal-war build process now support groovy classes AND Groovy unit test classes!!!
- can use groovy scripts in personDirectoryContext.xml (see link above)
Hmmm... thank you for bringing me back to this.  It helped me to realize something I didn't quite understand before.  I think I see an error in https://github.com/Jasig/person-directory/blob/person-directory-parent-1.6.0/person-directory-impl/src/main/java/org/jasig/services/persondir/support/GroovyPersonAttributeDao.java#L191. It is creating the IPersonAttributes using AttributeNamedPersonImpl which requires the username in the list of attributes; hence the need in AttributeDuplicatingPersonAttributesScript to create newUserAttributes from userAttributes.  

I suspect a better solution is GroovyPersonAttributeDao pulls the username out of the seed values using a usernameAttributeProvider so AttributeDuplicatingPersonAttributesScript only returns the new attributes.  As far as my experience has been with the personDirectoryDaos, username is always in the seed.