Typing for numpy

* if a is a ndarray<int>, a += 2. is always a ndarray<int>
* type of a in the case of a+=2 is not decltype(a + 2) but __combine(a, decltype(a + 2)).
* __combine(ndarray, T) is ndarray
add opetator-= for slices
Add unique