Added preliminary code for parallel ACA matrix-vector multiplication
Moved the constituentOperators vectors from LinearOperator
into LinearOperatorSuperposition.
Declared Potential and ElementaryPotential.
Started refactoring integrand evaluation.
Corrected a typo in LinearOperator.
Separated boundary operators and potentials.
Merge branch 'master' into extracted_potential
Heavily refactored the classes responsible for calculation of weak-form integrals.

From now on it is possible to use integrands of arbitrary structure
(e.g. involving multiple kernels or basis function transformations).
Calculation of the integrand at a single point is done in a functor
(so that compile-time optimisation is possible). One can also calculate
several kernels at once, potentially reusing information (like values
of special functions).

Note: OpenCL support is currently broken.
Completed the design of the Potential interface and implemented it for
the Laplace operators.
Added explicit destructors and includes to mass_matrix_container*.cpp files.
Temporarily removed kernel unit tests (which need to be adapted
to the new interface).
Rewritten some docs of LinearOperator.
Adapted examples to the new interface.
Updated Ahmed include files.
Corrected the Boost include path for tests.
Moved operator and potential constructors from headers into cpp files,
to avoid linking errors.
Merge branch 'mac_fixes' of github.com:bempp/bempp into extracted_potential

Additionally, remove warnings caused by signed-unsigned comparisons.

Conflicts:
	lib/assembly/aca_global_assembler.cpp
	lib/assembly/elementary_linear_operator.cpp
	lib/assembly/helmholtz_3d_double_layer_potential_operator.hpp
	lib/assembly/helmholtz_3d_hypersingular_operator.hpp
	lib/assembly/helmholtz_3d_single_layer_potential_operator.hpp
	lib/assembly/laplace_3d_adjoint_double_layer_potential_operator.hpp
	lib/assembly/laplace_3d_double_layer_potential.hpp
	lib/assembly/laplace_3d_hypersingular_operator.hpp
	lib/assembly/laplace_3d_single_layer_potential.hpp
	lib/assembly/modified_helmholtz_3d_adjoint_double_layer_potential_operator.hpp
	lib/assembly/modified_helmholtz_3d_double_layer_potential_operator.hpp
	lib/assembly/modified_helmholtz_3d_single_layer_potential_operator.hpp
	lib/assembly/weak_form_aca_assembly_helper.cpp
	lib/fiber/_2d_array.hpp
	lib/fiber/array_2d_imp.hpp
	lib/fiber/array_3d.hpp
	lib/fiber/array_3d_imp.hpp
	lib/fiber/array_4d.hpp
	lib/fiber/array_4d_imp.hpp
	lib/fiber/collection_of_basis_transformations.hpp
	lib/fiber/collection_of_kernels.hpp
	lib/fiber/expression_list.cpp
	lib/fiber/expression_list.hpp
	lib/fiber/geometrical_data.hpp
	lib/fiber/laplace_3d_adjoint_double_layer_potential_kernel.cpp
	lib/fiber/laplace_3d_adjoint_double_layer_potential_kernel.hpp
	lib/fiber/laplace_3d_double_layer_potential_kernel.cpp
	lib/fiber/laplace_3d_double_layer_potential_kernel.hpp
	lib/fiber/laplace_3d_single_layer_potential_kernel.cpp
	lib/fiber/laplace_3d_single_layer_potential_kernel.hpp
	lib/fiber/local_assembler_for_grid_functions.hpp
	lib/fiber/local_assembler_for_operators.hpp
	lib/fiber/modified_helmholtz_3d_adjoint_double_layer_potential_kernel.cpp
	lib/fiber/modified_helmholtz_3d_adjoint_double_layer_potential_kernel.hpp
	lib/fiber/modified_helmholtz_3d_double_layer_potential_kernel.cpp
	lib/fiber/modified_helmholtz_3d_double_layer_potential_kernel.hpp
	lib/fiber/modified_helmholtz_3d_single_layer_potential_kernel.cpp
	lib/fiber/modified_helmholtz_3d_single_layer_potential_kernel.hpp
	lib/fiber/nonseparable_numerical_test_kernel_trial_integrator_imp.hpp
	lib/fiber/scalar_function_value.hpp
	lib/fiber/scalar_function_value_times_normal_3d.hpp
	lib/fiber/scalar_space_mapping.hpp
	lib/fiber/separable_numerical_test_kernel_trial_integrator_imp.hpp
	lib/fiber/standard_evaluator_for_integral_operators.hpp
	lib/fiber/standard_evaluator_for_integral_operators_imp.hpp
	lib/fiber/standard_local_assembler_factory_for_operators_on_surfaces.hpp
	lib/fiber/surface_curl_3d.hpp
	tests/CMakeLists.txt
	tests/fiber/test_laplace_3d_adjoint_double_layer_potential_kernel.cpp
	tests/fiber/test_laplace_3d_double_layer_potential_kernel.cpp
	tests/fiber/test_laplace_3d_single_layer_potential_kernel.cpp
	tests/fiber/test_standard_local_assembler_for_integral_operators_on_surfaces.cpp
Removed unnecessary armadillo includes, added (I hope all) missing
"../common/common.hpp" includes and licence messages.
Edited main CMakeLists.txt, including the FIBER_CHECK_ARRAY_BOUNDS flag
in debug mode.
Introduced the distinction between trial space and the range of the operator.

The constructor of LinearOperator takes now references to three spaces:
domain (formerly testSpace), range (new) and the dual to range (formerly
trialSpace). The constructor of GridFunction takes a reference to the dual
space in addition to one to the primal space.

Note: GridFunction doesn't handle the case of primal_space != dual_space
correctly yet.