Overload `virtual_io` parameter to accept `True`, `False` or `stream`.
Make pointer to file object persist as `self._user_data`.