* The optimization of "len" is now based on type shapes of its
argument and detects exception raises for values that won't
have a "__len__" slot.
* The optimization of "iter" is now based on type shapes too,
and also detects exception raises for values that won't allow
an iterator to be taken.
* Also the optimization to remove useless iterators is now
done in the slot, as opposed to doing it through indicator
functions on the value, this saves not only time, but is
more readable.
* This also corrects wrong static calculation of len iterables
that do not have "__len__", e.g. tuple iterators.
* Added shapes for built-in types, and assign e.g. "len()" result
the information that it's an "int" or "long" (Python2).
* Ranges are lists, so are sequence multiplications. More of
these annotations will be needed to take full advantages.