Better handle persistent requests

When createMonitoredData() or createMonitoredEvents() fail, you can now access the handles that were assigned to the monitored items in Python (<the raised exception>.status.additionalDiagnostics().getNotificationHandles()) and C++ (<the returned Status>.additionalDiagnostics().getNotificationHandles()). This is useful because when createMonitoredData() or createMonitoredEvents() fail (e.g. because the server is not online yet), the UAF will still try to create the monitored items automatically in the background. So as soon as the UAF succeeds in creating the monitored items, you will need the handles to identify the notifications that you start to receive.

Formally:
      
- !!!Breaking change (only for the C++ API)!!!
 
  The handles from "uaf/client/clienthandles.h" (that were part of the uafc namespace) are now 
  part of the "uaf/util/handles.h" file (so they are not part of the uaf namespace).
  Also uaf::NotificationHandle (formerly uafc::NotificationHandle) is now a 32-bit unsigned int
  instead of 64-bit unsigned int.
  All this has no consequences for the Python API.
   
- The following classes have been added:
 
  - uaf::StatusDiagnostics 
    (pyuaf.util.StatusDiagnostics)
      
- The following methods were added to existing classes
 
  - uaf::Status::additionalDiagnostics() 
    (pyuaf.util.Status.additionalDiagnostics())