New utility class numeric_ops<T>

* numeric_ops<T>::is_zero(T x): tests if x is 0. This static method is
specialized for integral types, floating point numbers (tolerance can be
passed through an optional second argument) and for std::complex.
* numeric_ops<T>::conj(T x) returns a conjugate of x if T is an instance
of std::complex. Otherwise it returns x.
* One can add support for new user-defined 'numeric' types through
specializations of numeric_ops.
Better support for user-defined scalar_t in many_body_operator

* Use numeric_ops<scalar_t>::is_zero() and numeric_ops<scalar_t>::conj()
instead of explicit calls for double and std::complex<double>.
* Free factory functions c, c_dag and n are templated on scalar_t with
default set to double.