Yes, you can resuse q with different operations. The contexts are immutable as of v0.2.6, so there won't be issues if you decide to store a partial chain, then tack stuff on to it. In fact it's really efficient that way!
I'll try updating more docs as I add more Link integration in its own methods.
I was able to add split, finally. It's not flawless in fact it relies on me appending a "\0" to the end of a string. It sucks, I know, but there's no way of telling whether or not you reached the end of a string in JS, and there's no way of telling wther you are on the last element of a Lazy-executed chain. It works for my small battery of tests on it, so I think it's okay to do so. Though I wonder what the impact is to innocuously add a new element to the end of a string. Otherwise I can't see any way to do this without first resolving the end of a chain by running it, then splitting, then continuing in an entirely new link context. (Which is not necessarily lazy execution by any means). So this shall suffice.
I also added Join. Now there was an SQL-like join already in it, but this is an array join where it returns a string delimited by the character you choose to use.
Join is not lazy, because it returns a compiled instance: the string of the contents joined together. Split on the other hand is lazy and useful for splitting a few elements out of, say, a million.
Say you have a million words separated by spaces but want the first 5:
var words = Link(long_story).split(" ").take(5).toArray();
I see uses for this in dialog scripts all over the place. And it's fast too since the entire conversation doesn't need to be split, just the first few words or a section of words you decide to choose.
Split cannot detect the future, though, so:
var words = Link(story).split(" ").skip(5).take(5).toArray();
Means 10 words still need to be split, but no more.
...I could implement a new splitSkip() method that will skip the first n occurrences of a delimiter, but that's the best it gets for Link.