First sketch of ndarray support implementation

* python <> C++ bridge
* functions zeros, ones, empty, arange, linspace, sum
  cumsum, min, max, transpose, *_likes, all...
* constants pi, e
* indexing with scalar or tuples
* sharing across array references
* make spec parser aware of numpy
Use expression templates to implement numpy ufunc

* Use a combination of boost::simd and OpenMP for parallel computations
* Only activate SIMD extensions when AVX is found
* Always use unaligned load/store :(
* support all ufunc through nt2
Rework ndarray implementation

Legacy structure made it impossible to implement extended slices, and
the interface was unclear.

New implementation uses the classical way to represent N dimensional
array through a pointer to the data and array of pointers to hold the
intermediate dimensions.
Do not include nt2 simd version in scalar mode

This results in faster compilation time
Harmonize numpy expression handling

* rely on size() method to get the number of elements in the expression
  (shape agnostic)
* rely on at(long) method to access a given element in the expression
* rely on load(long) method to load a vector from the expression
* slices respect this interface
* ndarray respect this interface
Implementation and test of several numpy functions

* alen
* all
* allclose
* alltrue
* amax
* amin
* angle
* any
* append
* argmax
* argmin
* argsort
* argwhere
* around
* array2string
* array_equal
* array_equiv
* array_split
* array_str
* asarray
* asarray_chkfinite
* ascontiguousarray
* asscalar
* asarray_chkfinite
* ascontiguousarray
* asscalar
* atleast_1d
* atleast_2d
* atleast_3d
* average
* base_repr
* binary_repr
* bincount
* clip
* concatenate
* conj
* conjugate
* copy
* cumprod
* cumproduct
* delete_
* diag
* diagflat
* equal
Consistently rebuild env during constant folding

Try hard to gather the proper imports
Fix expression template typing and ndarray combiners

An ndarray combined with anything remains an ndarray.
Add type detection management

* is_array_like detect ndarray, list and numpy_expr
* nested_container_depth is overloaded for numpy_expr. usefull for asarray function
More numpy functions

* where
* nonzero
* copy (improved)
Make container validation more flexible

Useful for tuple of ndarrays
Add support for pow2

pow2 is just the power of 2.
For an unknown reason, this yields far better performances that
poweri...
Conservative choices for type inference stuff

* do not use lazyness informations
* costly but more accurate operator typing
Add missing operators for sliced_array

Namely += and -=.
Numpy functions update

* fix ref and const ref for where
* add unwrap function
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
More numpy functions

* diagonal
* diff
* digitize
* dot
* ediff1d
* eye
* finfo
* fix
* flatnonzero
* fliplr
* flipud
* fromfunction
* fromiter
* eps
* fill
* flatten
Automate conversion of list to ndarray when calling unary ufunc
Add operator+= and operator+ to imap iterators
More numpy functions

* fromstring
* identity
* indices
* inf
* inner
* insert
* intersect1d
* identity
* indices
* inf
* inner
* insert
* intersect1d
* iscomplex
* isneginf
* isposinf
* isreal
* isrealobj
* isscalar
* issctype
* lexsort
* logspace
* mean
* median
* nan_to_num
* nanargmax
* nanargmin
* item