A view type for IStream.

View types are better practice than option types for pattern-matching. (Plus, they save a minute amount of allocations)
IStream: remove a useless Obj.magic.

Lazy.lazy_from_val does almost the same thing as this Obj.magic. It makes some extra dynamic check, but it's frankly unlikely that it could be observed.
IStream: change type of thunk, spare allocations.

Two changes:
- 'a Lazy.t  becomes unit -> 'a
- 'a t becomes 'a u (the view type)

This spares two Lazy.force, and leverages Lazy.lazy_from_fun. Considering Lazy.force is fairly slow, in particular because of the write-barrier, this should be beneficial.
IStream: a concat_map primitive.
IStream: more efficient implementation of concat_map.
Removed some trailing whitespaces.
TacticMatching: avoid some closure allocation in (<*>).