Currently the bit reader we have is very limited. It is convenient to expand it to cover at least the following:
- Reading from a file (better from general binary stream)
- Writing to a file(yet again better to a binary stream)
- Proper handling of end of stream