Refactor how `vio_get_filelen` works, to use a pre-calculated `_length`:
* Regular files continue to use `seek`/`tell`
* Streams are expected to either set `_length` directly, or implement `__len__`
Fix typo.
Update README to include description of `Virtual IO` interface