BUG: Make integer array rounding method return a copy.

Originally motivated by issue #3540. Array rounding was occuring in
place when the array contained integers and decimals>=0 (counter to what
the documentation said). Also, sometimes the array returned was copied
from the input array, and sometimes it was created fresh. This led to
bug #3540, where rounding an array with a view would sometimes return
another array with the same view, and sometimes not. Furthermore, the
output array, when supplied, was used as the workspace while rounding.
When the output was an integer array, then function would round down
rather than round to the nearest because of this.

A much more thorough test of the rounding method was also implemented.
This test will catch issue #3540, as well as the rounding-in-place bug.