observables/…/wavevector: use iterator instead of value as keys

Comparison of iterators is safe, and thereby we can drop the
floating-point keys along with the less_tol() hack. See the previous
commit 92b2baa for details.

This affects only the internal data structure 'multimap', not the module
interface.
raw_array: provide free functions begin() and end()

The free functions begin() and end() are required for a proper container
in C++11.
observables/…/correlation: change signature of compute()

Let the correlation function take care of accumulating the results.
Instead of returning the result of a single call, it receives a
reference to the accumulated results. Thereby, also non-arithmetic
result types (e.g., arrays) can be supported.

Replace compute() by operator() to emphasise the functor role that the
TCF classes play.
correlation: revise module for future support of tensor TCFs

A tensor-valued TCF depends on extra parameters, e.g., the intermediate
scattering function S(k, t) depends on the wavenumber k and is thus
considered a rank-1 tensor. Such TCF functors will define:

    enum { result_rank = 1 };
    unsigned int const* result_shape() const;

The challenge was to extend the dynamics::correlator interface in such a
way (using SFINAE) that simple TCFs do not need these additional
definitions.
observables/dynamics: drop accumulator_type

Let the TCF functors define result_type (and optionally result_rank and
result_shape), accumulator<result_type> is then hard-coded in the
signature of operator() and in correlation.hpp. It is not a free
parameter, the code is closely tied to the interface of
halmd::accumulator.
observables/dynamics: add writer() to TCF modules

The writer function is called by blocking_scheme. It opens the specified
data group on the file and returns a writer instance. This provides a
means to the correlation function of storing additional data, e.g., the
wavenumber.

Drop attribute 'group' of correlation functions, which has become out of
use. Rename "profiler description" in the documentation to "module
description".

User-defined correlations: rename constructor parameter 'group' to
'location', and let the user provide the full path, i.e., including the
root group 'dynamics'. The passed value serves as default for writer().

Revise Lua script of dynamics.blocking_scheme. Store mean value of the
result in "value" to comply with the H5MD standard.
drop observables::samples::density_mode

This module has become out of use since observables::density_mode
returns raw_array<fixed_vector<double, 2>> directly. Instantiate
blocking_scheme with this type.
observables: add intermediate scattering function S(k,t)

The module assumes that S(k,t) depends only on the magnitude of the
wavevector, which holds for an isotropic system. The average over
wavevectors with comparable magnitude is returned.

This is the first example for a rank-1 time correlation function, i.e.,
a correlation function that depends on a parameter (the wavenumber).
observables.ssf: fix labels for logger and profiler
blocking_scheme: periodically output accumulated results

The output files are flushed on POSIX signal USR2. This allows
inspecting the current state of time correlation functions which is very
helpful for long simulation runs.
observables/…/correlation: support two independent input samples

Collective correlation functions (e.g., the intermediate scattering
function) may correlate distinct particle groups, e.g., the density
modes for different particle species in a mixture.

Let dynamics::correlation distinguish two input samples which are stored
in separate instances of dynamics::samples::blocking_scheme. In order to
keep simple correlation functions (e.g., the mean-square displacement)
simple, the Lua interface for dynamics.blocking_scheme supports a single
acquisitor or a table of one or two acquisitors.

intermediate_scattering_function: rename the argument field
'density_modes' to 'density_mode' which is in line with our coding
convention to prefer the singular.