srm: Generate unique write TURLs

The patch adds unique write TURLs for SRM. Unique TURLs are generated by
asking pnfs manager to create a temporary upload path. After upload, pnfs
manager commits the new file to its final name and location.

Since access latency, retention policy, size and space token are now stored in
the name space as part of the temporary upload path, there is no longer any
need to create a file reservation in space manager bound to the path.  Besides
simplifying the control flow, this solves the problem that the fields in
PutFileRequest that kept the state about whether we marked space as being used
were not persistent. This was a cause of the "Already have 1 record(s)" error
message.

Implicit space reservations as performed by the SRM are no longer needed and
srm.enable.space-reservation.implicit is obsolete. Instead space manager has to
be configured to allow uploads to link groups without prior reservations.  This
is achived using the spacemanager.enable.unreserved-uploads-to-linkgroups
setting.  The setting spacemanager.enable.reserve-space-for-non-srm-transfers
is deprecated. The property srm.enable.space-reservation.strict is obsolete
too.

Since there is a risk of lost notification from PnfsManager to SpaceManager,
SpaceManager has gained code to check whether name space entries of files in
the TRANSFERRING state still exists. Such checks should be done for all states,
however the risk is the biggest for files in TRANSFERRING.

The AbstractStorageElement interface is modified in several ways. The most
obvious change is that putDone and abortPut now call through to the storage
implementation. The TURL computation functions now take a fileId rather than
the SURL. The fileId is opaque to the SRM code, and the dCache storage
implementation now uses it to store a transfer path rather than a PNFS ID.

PnfsManager no longer injects default access latency and retention policy for
files in a directory with a WriteToken tag. Such values are injected by
SpaceManager. However explicit AccessLatency and RetentionPolicy tags are still
respected. SpaceManager will fail the upload in case of conflicts between those
tags.

Since the upload now hapens to a different path, I added billing notification
from SRM on upload. The billing entry from the transfer door contains the turl
path (I considered injecting the real path, but since the client could try
uploading several times and since the upload isn't persistent until putDone is
called, I think using the turl path is better). The SRM is assymetric here as
downloads are not reported to billing (they would just duplicate existing
information) - it is however easy to add if there is a good use case for it.

Target: trunk
Require-book: yes
Require-notes: yes
Acked-by: Paul Millar <paul.millar@desy.de>
Patch: http://rb.dcache.org/r/6639/