Sync LMDB code.
Some tweaks to copy/migrate config.

The folllowing changes were made:

- The copy and migration jobs up until now always needed that you specify a
  storage in the Job while most of the time it was never used as the real
  storage used also depends on what the original Job used for storage.

  This patch tries to relax the need for specifying a read storage and
  tries to always use the info of the original pool used by the previous
  Job being copied or migrated or the original storage settings of the Job
  itself.

  When you start a copy or migration you now don't see the somewhat random
  read storage that can change along the way but only the write storage.
  In essence it should also not matter what read storage is used as long
  its the right read storage.

- We can now have migration and copy jobs without a dummy client setting
  but this means that the %c variable of the Job will not be filled and as
  such you won't see the client name in the completion mail subject. So we
  now copy the client pointer from the actual previous Job that is
  migrated or copied so that we do have the proper client name and also
  the client name of the actual client the migration or copy was done for
  an no longer the dummy name it was before.

- Analog to using the client from the previous Job we also use the fileset
  and job level of the previous Job so that the copy migrate now always looks
  similar to the original Job its copying e.g. no longer a backup level
  incremental when copying/migrating a full level Job.

- Try to be smart about when to use data spooling.
  Only use the Job data spooling setting when not enabled yet. e.g. when the
  JCR already has data spooling enabled we don't want to disable it because
  the Job has no explicit setting.

- Restored printing of the client/fileset/level in the copy/migrate overview
  something we removed in a previous patch when we removed the explicit need
  for specifying these settings. Now that we set the correct information in
  the copy/migrate setup we can again print this data and now also show the
  correct info if you configure your copy/migrate jobs using the new config
  syntax e.g. without setting a dummy client and fileset.
Create an empty rados object in d_open when O_CREAT is set.
renamed package: macbareos to bareos-filedaemon

Renamed the Bareos MacOS package from macbareos to bareos-filedaemon
to be aligned with most of the other platforms.
Make storage status somewhat more informative.
Don't check client concurrency for Migrate/Copy Jobs.

Now that we set the actual client for which a migrate/copy is done we
should no longer check the client concurrency as that makes no sense for
a migrate/copy job as the client is not consultated at all so we can run
with as many concurrency as allowed by the storage concurrency.
Allow to read from file type devices multiple times.

Up until now the volume reservation logic only allows you to have one
Job access the same read volume. For file type devices multiple readers
should be no problem and most filesystems are even optimized for this
nowadays by allowing multi parallel sequential read streams which are
handled very efficiently.
Reschedule on error caused EndTime to be incorrect
Flush console queued job messages
Cleanup lockmgr.h

Some platforms don't like spaces in #define and other preprocessor
commands so lets cleanup this mess.
Drop last instances of generate_daemon_event()

This is an reminiscent of the old python code. As we replaced it with a
proper plugin interface now everywhere we can drop this old dummy
functions and definitions.
Fix TODO from November 2008.
Add first attempt for support libcephfs stored backend.
First prototype dynamic loading SD backends.

We now store all shared objects used in all SD programs
(stored, btape, bls ...) in a shared library named
libbareossd-<version>.so so the final binaries get much
smaller and share the same code. Next to that we started
the first work on making tape specific code abstracted in
the tape_device class and no longer in the generic device
code. Now we implement the different methods of the different
device classes using virtual methods some are pure virtual
which means that the derived class needs to implement this
method itself and some have a default implementation which the
class can override.

This also contains the first try at making it possible to
dynamically load the different SD backends. The file backend
will always be part of the libbareossd.so but the tape and
the different cloud storage backends are dynamically loadable
using the same technique as what is used for loading the
different catalog backends. This means that we can distribute
the different storage programs without the need to have all
kind of dependencies on the different cloud backend we support
now.

As part of this big refactoring we removed the vtape code which
doesn't serve a real purpose anymore in Bareos as there are much
better alternatives (MHVTL and QuadstorVTL) nowadays and we should
carry on unmaintained code. The alternatives also see steady
development while vtape hasn't been updates in ages. Also these
alternative VTL emulators implement a true autochanger, encryption
and much more like personality support for all major brands in
real tape hardware which also means we test our tape code much
more thoroughly.
Initial commit for TapeAlert support.
Initial code commit for keeping statistics in the SD and transfer to DIR.
Some preliminary work for allowing to have audit events.
Use a special backend dir to store both catalog and storage backends.

We want to store the catalog and storage backends in a special dir so
they are not in any lib directory as they are not really shared
libraries but shared object with some very specific entry points.

The code is now so that by default the configured backend dir set at
compile time is set as default and the user can specify additional
directories that should be searched for backend in the configfile of
both the director and the storage daemon. The code checks if the wanted
backend is located in one of the specified backend directories and it
loaded from the first directory it is found in.

The packaging is changed to do the following:
- Enable building packages with dynamic-storage-backends.
- Different backends are handled in separate libraries.
- The bareos-storage-tape package does now also contain the required libraries.
- The fifo backend is also handled by a separate package (bareos-storage-fifo).
Autoexclude NotForBackup entries on windows

On windows, the registry entry
"SYSTEM\\CurrentControlSet\\Control\\BackupRestore\\FilesNotToBackup"
is intended to have a list of dirs and files that should not be backed
up.

We automatically read that entries and configure the fileset to exclude
them.

Fixes #315: Support for NotToBackup Registry Key
get rid of special SPEC file for RHEL4

use the normal bareos.spec also for RHEL4

Signed-off-by: Marco van Wieringen <marco.van.wieringen@bareos.com>