Make Bitcask I/O mode configurable: Erlang vs NIF

The recent changes to revert Bitcask to using pure Erlang file I/O have lead to noticeable performance regressions in certain workloads. This change makes the file mode configurable, setting the default to the previous NIF-based approach. Users can switch to the Erlang-based I/O mode if they run into situations where the NIF-approach leads to scheduler collapse.

The option is determined based on the Bitcask application variable `io_mode`. When missing or set to `nif`, the NIF-approach is used. When set to `erlang`, standard Erlang efile is used.