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 :
> def foo(a):
>     b = np.copy(a)
>     return b + 2
> with a = [[1, 2], [3, 4]]


this code will currently perform a copy (due to the np.copy) then an
allocation to hold the final result.

looking at ``pythran/pythonic/types/numpy_unary_expr.hpp``, if np.copy
where a u_expr, the list would be first turned into a ndarray (the
arr2list convesion), then the final allocation would occur, resulting in
the very same number of allocation / conversion ;-)