improved array2d copy

If two 2d arrays have same orientation, the first overload of function
"copy_array2d" is suitable and more economical.
added missing head file in utils.h

missing head file for thrust::unary_function
fixed cusp::complex<double> crashing

The copy constructor of cusp::complex<double> may crash. Don't know the
exact reason yet. It was observed by some others:
https://groups.google.com/forum/#!topic/cusp-users/GdAw7Hishd8

However, it seems that replaying the call to the cuDoubleComplex
constructor in the initialization list by assignment in the body of the
constructor fixes the issue.
Merge pull request #49 from xiongzubiao/master

improved array2d copy; added missing head file in utils.h; fixed cusp::complex<double> crashing