Changing reference return values to copy return values for ease of reading and for taking advantage of Return Value Optimization

This means returning Matrix instead of Matrix&
Also changes some demo stuff