Added default + copy constructors to Array2D

Added a default and copy constructor to Array2D.

The assignment operator has also been overloaded, and uses a new public
function, resize to do this. The resize function destructively resizes
the internal arrays. This is called from some of the constructor
overloads, and the assignment operator.

A private release function was added to free memory and invalidate the
array. This is used when memory needs to be explicitly released during a
resize operation.