Add support for dynamic data sources

Dynamic data sources are data sources created on fly, based an arbitrary
dns provided by the user.

The implementation changes mainly the DataSourceConfiguration class, in
the following fashion:

* Dynamic data sources are configured with an extra element, <pattern>.
  This should contain a regular expression that will be matched against
  dns that do not otherwise correspond to the exact names of other
  (regular) data sources.
* A first, "unmatched" instance of DataSourceConfiguration is initially
  created for the dynamic data sources.
* This instance is returned when ServerConfiguration is asked for the
  full list of data sources. This general instance is usded for
  displaying "general" information about the data source, namely
  information that does not require the instantiation of the data source
  itself, but only requires reading configuration information.
* When a specific data source is requested, then if the dsn is not found
  the patterns of the dynamic data sources are matched one by one
  against the requested dns. If there is a match...
* The DataSourceConfiguration is cloned and the matcher is injected into
  it.
* When the actual data source is requested from the
  DataSourceConfiguration object, it is created and initialized on the
  fly. The cloned DataSourceConfiguration, with the matcher attached is
  passed to the data source init() method.
* Because dynamic data sources should not be destroyed on shutdown
  (there can be an infinite number of them!), they are to be destroyed
  on each use. Unfortunately, the interface had to be complicated for
  this purpose. Everytime a data source is fetched from
  DataSourceConfiguration there should be a matching call to
  DataSourceConfiguration::destroy() and the object should be used
  anymore.