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.