Implement an aliasing detection method for Matrices.

Essentially, operations that don't cause problems when aliased are guaranteed to go
through 'assign' without issue. Otherwise, you need to use alias_assign which
uses a &mut self, which should detect when you're aliasing and prevent you from
doing it. As this is overly restrictive (e.g. consider assigning from a nop
double transpose) there is an escape hatch of unsafe_assign.