GRAILS-9928 - improve the handling of wrapper downloads

The old logic was something like this:

if downloadFile does not exist
    download to downloadFile
end if

if installDir does not exist
    extract downloadFile to installDir
end if

This was problematic if downloadFile exists and installDir does not exist and downloadFile is not a valid zip file.  This would happen if an earlier attempt was made to download to downloadFile but for some reason could not be completed.  That would lead to attempting to extract an invalid zip file.

The new logic is something like this:

if installDir does not exist
    download to downloadFile
    extract downloadFile to installDir
    delete downloadFile
end if
Merge branch '2.2.x'
Introduce Hal Xml binding source
mark class with @CompileStatic
GRAILS-10336 - mark exception class with @CompileStatic
GRAILS-10336 - mark exception classes with @CompileStatic
GRAILS-10336 - mark exception classes with @CompileStatic
Merge branch '2.2.x'