figaro: Reorganize open logic in COPOBJ

HDF5 does not allow a READONLY file to be reopened as
READWRITE when the file is still open. This breaks COPOBJ
when copying an object from one part of a file to another
location in the same file.

To overcome this we now use DAT_ASSOC to see if the source
object exists (as before), then DAT_REF to get the full path
to the object and then DAT_CANCL to free locators associated
with the parameter.

Once we know the destination is okay we then reopen the
source locator using HDS_FIND.
figaro: HDSv5 may well return DAT__FILIN or DAT__FILCR

So check for both when failing to create a file that already
exists.
figaro: Free NDF locators after each call to an action

If the application runs in monolith mode some NDF resources were
being retained. This runs in to trouble when one task opened a
file for READ and the next task in the same monolith opened the
file for UPDATE. HDF5 does not like that. Now we run ndfCancl in
the top level routine so that parameters used by the task for
NDF access will be cleared automatically.
hds-v5: Fixes to groups and clones

The Figaro specdre demo ICL script discovered two bugs that have
been fixed:

1. datClone now always returns a secondary locator.
2. Locators derived from locators that are registered in a group
   are also members of the group. This means datParen, datFind
   and datIndex now correctly propagate group membership.

hdsLink will now also allow a grouped locator to be reassigned
to a new group.