Major speed boost for code which processes lazy lists (esp. when previously realized)

Previously, lazy lists were composed of chains of alternating Stream and
Sequence objects. This meant that our linked lists actually had *2* links for
each item in the list. Traversing those lists required chasing twice as many
pointers as actually necessary.

With this patch, once realized, Stream objects store their own head/tail. So
a realized lazy list just has *1* link for each item, rather than 2.