Restore of encrypted data fails when not all files are created.

We should check if a file is actually extracted when checking
if we encounter an unexpected STREAM_ENCRYPTED_SESSION_DATA.
The rctx.cs is setup by a call to crypto_session_decode()
and that session lingers until its teared down by
close_previous_stream() but that only occurs when the next
file is actually extracted. So if we extract one encrypted
file and not the one after that the rctx.cs will not be cleared
until we hit the next extracted file or the end of the restore.
So we should only handle the session at all when we extract
the file as otherwise it makes absolutely no sense to even
consider the encrypted session data stream at all as we will
be skipping the file extract anyway and skip all encrypted data
blocks.

Fixes #192: Restore of PKI encrypted data fails if some of the files
            should not be replaced
Interactive path selection can use refactoring

The code in the director which is used to select interactively the files
to restore needs some cleanup. Currently the cwd (current working
directory) is stored in a fixed length buffer of sometimes 1100 and
sometimes 2000 bytes. It would be better to use a POOLMEM buffer
which can extend to the actual length needed.

Currently you can also not directly mark or unmark a full path as the mark
and unmark only matches the name using fnmatch against the current working
directory. This also skips any path information and as the internal storage
of the tree is per directory node this will never work. A simple fix would
be to check if the selection pattern is a full path (e.g. has a / in it)
and then split the selection in a path and file part. Then we can do a
change directory into the wanted path and then do the same pattern matching
and restore the working directory after the selection.

Fixes #195: Interactive path selection can use refactoring
Fix tree_getpath to work with paths longer then 256 bytes.

We use a temporary POOLMEM buffer for the storage of the full
PATH but as we were passing that as a pointer not a pointer to
a pointer when the buffer reaches 256 bytes the check_pool_memory_size
will allocate a new buffer but as we cannot pass the right new buffer
back to the calling function we were still using the already freed
buffer which we pass back to the calling function which then tries
to free that pointer again which leads to the memory allocator blowing
up with a double free error.
Added Option to also use SILENTKEEPCONFIG

Now the installer and uninstaller can also use the option
SILENTKEEPCONFIG to keep existing configurations.

During install, existing configurations are kept and the new one is
installed as file.NEW.

During uninstall, the existing config files will not be deleted.
Plugin framework enhancements.

Up until now the plugins for the fd/sd/dir are loaded semi at
random by the way they are stored in the plugin directory as
they are loaded in the order readdir returns the directory entries.

This is NOT how you want it in certain situations so from now on
you can specify in the fd/sd/dir a new keyword in the generic
daemon config resource named "plugin names" which is a list
which is seperated by a ':' and enumerates the plugins that
should be loaded in what order by a daemon. In this resource
you can define the following 'plugin names = "python:bpipe"'
which means in the fd load the following plugins:

- <plugin_dir>/python-fd.so
- <plugin_dir>/bpipe-fd.so

If you don't specify the plugin names then the old behaviour
will be used to load all plugins which match the pattern
*-<daemon>.so

Now we can order the way plugins are loaded there is also a
new flag to the generate_plugin_event() function which is named
reverse which is a boolean and if its set the plugins will be
called in reverse order that they are stored in the plugin list.

Fixes #196: Plugin framework enhancements.