Smart ptr instead of isOriginal (boolean)

Is Original? was a boolean responsible for dealing with copies and avoid deleting important data from memory.
It has been replaced by a clever way of dealing with multiple pointers targeting the same piece of data: smart ptr.

This smart ptr is responsible for counting the number of instances of Matrix (resp. Vector) having the same data_.
When the destructor is called, it has to check that it can delete both smart ptr and data_, otherwise it just decreases by one the counter (smart ptr).