DEC: Discrete Exterior Calculus

This new package adds discrete exterior calculus features to DGtal. It contains:
 
   - new `dec` packages (dec operators, test files, examples, documentation)
   - new `linalg` with linear algebra concepts and backends (Eigen at this point) 

As you would see, this PR, mostly managed by @elcerdo,  is quite huge and some documentation pages are still "work-in-progress". I send a PR just to start including this great package into DGtal and to clean things up thanks to your comments.
If you write

struct A {
   A( Clone<B> b ) : myB( b ) {}
   B myB;
};

B b1;
A a1( b1 ); // copied only once
A a2( B() ); // not even copied, created at the correct place

You may also write:

struct A {
   A( Clone<B> b ) : myB( b ) {}
   CowPtr<B> myB;
};

B b1;
A a1( b1 ); // copied only once
CowPtr<B> cow_b2 = CowPtr<B>( new B );
A a2( cow_b2 ); // O(1), lazy copy, wait for a change

Jaco


>> +    typedef typename Calculus::DenseVector Container;
>> +    typedef typename Calculus::Scalar Scalar;
>> +
>> +    /**
>> +     * Constructor.
>> +     * @param calculus the discrete exterior calculus to use.
>> +     */
>> +    KForm(ConstAlias<Calculus> calculus);
>> +
>> +    /**
>> +     * Constructor.
>> +     * @param calculus the discrete exterior calculus to use.
>> +     * @param container the container to copy.
>> +     */
>> +    KForm(ConstAlias<Calculus> calculus, const Container& container);
>> +
>
> Won't this copy the object twice (in Clone<T> T cast operator and in  
> copy constructor)?
> See comment above
>
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/DGtal-team/DGtal/pull/821/files#r14815987