Have core::string use shared pointers

Necessary to fix a tricky bug with itertools.imap...

Sometimes lead to performance gain (less copies) and sometimes to
performance loss (extra indirection)

This is something we had to do anyway ;-)
Rework GMP integration

* make it possible to fall back to long long when not using -DUSE_GMP
* do not bother with manual inclusion of pythran_gmp.h, leave it to
  USE_GMP
* pythran_long_def -> pytrhan_long_t for consistency
Fix bad typing of dict.set_default

It is impossible to compute a new return type as it is incompatible with
returning a reference.
Fix bug in core::string stream unpacking

operator<< has to be in the right namespace to work (but why?)
Allow string iteration with a step !=1

Using a custom iterator, of course. As string are immutable in python,
the iterator is always a const_iterator.
Fix bug in ifilter

Previous implementation was steping its iterator one step too much.
Fix bug in assignable property propagation

It was not implemented for arrays and tuples, so tuples of GMP
expression did not compile right.
Make more euler test cases work

Sometimes, specifying that long ints are used is mandatory for pythran
compatibility.