WIP : added down-cast on methods that do not preserve shape

 - added tests for most down-casting functions
 - not-implemented reduce based functions (which seem to down cast
   on their own if __array_finalize__ raises an error)