Add an 'epoch' counter to subdivide Bitcask timestamps

In order for the multi-folder work to operate correctly, it
needs to be able to keep track of exactly when a fold started
relative to any mutations that happen during the same 1-second
time interval.  If a merge process cannot tell exactly if a
mutation happened before or after its fold started, then merge
may do the wrong thing: operate on a key zero times, or
operate on a key multiple times.

An epoch counter now subdivides Bitcask timestamps.  The epoch
counter is incremented whenever an iterator is formed.  A new NIF
was added, keydir_fold_is_starting(), to inform a fold what the
current epoch is.  The fold starting timestamp + epoch are used for
all get operations that the folder performs.

If the keydir contains only a single entry for a key, there's
no need to store the epoch with that key.  The epoch is stored
in the struct bitcask_keydir_entry_sib, when there are multiple
entries per key.

Things are very tricky (alas) when keeping entries in the
siblings 'next' linked list in newest-to-oldest timewise order.
A merge can do something "newer" wall-clock-wise with a mutation
that is "older" by that same wall-clock view.  The 'tstamp'
stored in the keydir is the wall-clock-time when the entry
was written for any reason, including a merge.  However, we
do NOT want a merge to change a key's expiration time, thus a
merge may not change a key's tstamp -- the solution is to have
the keydir also store the key's 'orig_tstamp' to keep a copy
of they key's specified-by-the-client timestamp for expiration
purposes.

To avoid mis-behavior of merging when the OS system clock
moves backward across a 1-second boundary, there is new checking
for mutations where Now < keydir->biggest_timestamp.  Operations
are retried when this condition is detected.

Try to avoid false-positives in the
bitcask_pulse:check_no_tombstones() predicate by calling only
when opened in read-write mode.

Remove the fold_visits_unfrozen_test_() and replace with a
corrected fold_snapshotX_test_()