Improve numpy.copy

* better type coverage
* I have tested that std::copy is used whenever possible.

with pythran
1000 loops, best of 3: 711 usec per loop  # 2d np.ones + copy
100 loops, best of 3: 7.7 msec per loop   # 2d np.ones + double copy
100 loops, best of 3: 8.66 msec per loop  # 2d list + copy

with cpython
100 loops, best of 3: 4.86 msec per loop  # 2d np.ones + copy
100 loops, best of 3: 7.96 msec per loop  # 2d np.ones + double copy
10 loops, best of 3: 76.8 msec per loop   # 2d list + copy
It would be somthing like : 
```Python
def foo(a):
    b = np.copy(a)
    return b + 2
```
with a = [[1, 2], [3, 4]]
It is a case where b is use just like an `asarray`. I am not sure we should care about it ...