<issue_start><issue_comment>Title: Feat: improve memory usage /  allow for in-memory storage of all entries to be optional (WIP)
username_0: ## Description

Currently, all entries (and all the data in it) are kept in memory. The goal of this PR is to make this optional in order to improve load times and performance on memory-limited environments when interacting with larger/longer log sets.

Related: https://github.com/orbitdb/ipfs-log/issues/136, https://github.com/orbitdb/ipfs-log/issues/203, https://github.com/orbitdb/ipfs-log/pull/239

### Breaking Changes

The following getters and methods become async / return promises. 
- `log.values`
- `log.tails`
- `log.tailHashes`
- `log.get()`
- `log.traverse()`
- `log.iterator()`
- `log.toString()`
- `log.toSnapshot()`

### Benchmarking
**Before**
wip

**After**
wip

#### Tradeoffs

wip

## TODO

- [ ] update tests
- [ ] write new tests
- [ ] benchmarking / document performance tradeoffs
- [ ] adjust entryIndex to allow caching of all entries by default
- [ ] document breaking changes
- [ ] update method comments
- [ ] squash / clean up commits
- [x] remove forked orbit-db-io
<issue_comment>username_1: Excited about this if it turns out to work! Would you mind though making this a draft PR until it's ready?
<issue_comment>username_1: How are you feeling about this one @username_0 ? :)
<issue_comment>username_0: Feeling like I need to get back in the game! I plan on coming back to this in the not so distant future.
<issue_comment>username_1: Ok, I'll leave it open then :+1:
<issue_comment>username_1: @username_0 the not too distant future is upon us :D hope you are happy + healthy in these trying times.

If you want to hop back in I can totally support you. Did you see I finally merged #307 ?
<issue_comment>username_0: Quick status update of what I think is left. Merge the following into ipfs-log master:

- [ ] https://github.com/orbitdb/benchmark-runner/pull/17
- [ ] https://github.com/orbitdb/benchmark-runner/issues/26

After these two I can dig deeper in the benchmarks to make improvements (i.e. analyze various LRU libs)

- [ ] make `log.traverse` into an async iterator
- [ ] update `log.spec` tests
- [ ] what to do with errors when loading an entry from a multihash
- [ ] document breaking changes