fix a bug related to options.length in ReadStream

`last` seems to be the mark where it should stop reading. But it's now depending on `self.offset`, which changes every time `_read()` is called. This PR moves `last` computation to `:initialize()`. Also, that part of code is modified into a clearer but less concise form.