PULSE test: restrict shrinking a bit, add extra fudge time
PULSE test: add missing precondition for 'get' op
Fix race condition in write_and_keydir_put()

Yet another unconditional keydir update that returns to bite later.
In a race with merge, if merge makes a keydir update between the
keydir read of do_put() and the keydir update of
write_and_keydir_put(), we must tell the keydir update that this
update needs the OldFileId prerequisite check.

* Add args to write_and_keydir_put() to pass in prerequisite info
* Use bitcask_nifs:keydir_put/10.
* Export bitcask_nifs:keydir_put/10.

Passes this previously-failing case, with 5,000 iterations:

    Cqq3 = [[{set,{var,3},{call,bitcask_pulse,fork,[[{init,{state,undefined,false,false,[]}},{set,{not_var,1},{not_call,bitcask_pulse,incr_clock,[]}},{set,{not_var,2},{not_call,bitcask_pulse,incr_clock,[]}},{set,{not_var,3},{not_call,bitcask_pulse,incr_clock,[]}},{set,{not_var,4},{not_call,bitcask_pulse,bc_open,[false,{true,{76,128,158},62}]}},{set,{not_var,5},{not_call,bitcask_pulse,fold,[{not_var,4}]}},{set,{not_var,6},{not_call,bitcask_pulse,incr_clock,[]}},{set,{not_var,7},{not_call,bitcask_pulse,fold,[{not_var,4}]}},{set,{not_var,8},{not_call,bitcask_pulse,gets,[{not_var,4},{3,11}]}},{set,{not_var,9},{not_call,bitcask_pulse,gets,[{not_var,4},{7,50}]}},{set,{not_var,11},{not_call,bitcask_pulse,incr_clock,[]}}]]}},{set,{var,4},{call,bitcask_pulse,bc_open,[true,{true,{255,63,413},100}]}},{set,{var,8},{call,bitcask_pulse,puts,[{var,4},{1,30},<<168,239,137>>]}},{set,{var,9},{call,bitcask_pulse,fold,[{var,4}]}},{set,{var,12},{call,bitcask_pulse,delete,[{var,4},7]}},{set,{var,13},{call,bitcask_pulse,puts,[{var,4},{1,13},<<7,103,94,199,217,211,64,106>>]}},{set,{var,14},{call,bitcask_pulse,puts,[{var,4},{18,33},<<141,252,203,157>>]}},{set,{var,15},{call,bitcask_pulse,puts,[{var,4},{42,47},<<209,111,152,239,176,33,14,200>>]}},{set,{var,19},{call,bitcask_pulse,fork_merge,[{var,4}]}},{set,{var,21},{call,bitcask_pulse,puts,[{var,4},{3,20},<<228,240,196,12>>]}},{set,{var,22},{call,bitcask_pulse,puts,[{var,4},{47,48},<<206,42,5,22>>]}},{set,{var,23},{call,bitcask_pulse,delete,[{var,4},7]}},{set,{var,27},{call,bitcask_pulse,sync,[{var,4}]}},{set,{var,28},{call,bitcask_pulse,puts,[{var,4},{31,38},<<71,173,38,2,161,59,41>>]}},{set,{var,29},{call,bitcask_pulse,incr_clock,[]}},{set,{var,30},{call,bitcask_pulse,bc_close,[{var,4}]}},{set,{var,31},{call,bitcask_pulse,incr_clock,[]}},{set,{var,32},{call,bitcask_pulse,bc_open,[true,{true,{218,167,488},84}]}},{set,{var,33},{call,bitcask_pulse,delete,[{var,32},28]}},{set,{var,34},{call,bitcask_pulse,fork_merge,[{var,32}]}},{set,{var,35},{call,bitcask_pulse,delete,[{var,32},7]}},{set,{var,37},{call,bitcask_pulse,delete,[{var,32},23]}},{set,{var,38},{call,bitcask_pulse,put,[{var,32},44,<<227,215,111,250,91,38>>]}},{set,{var,39},{call,bitcask_pulse,delete,[{var,32},29]}},{set,{var,41},{call,bitcask_pulse,sync,[{var,32}]}},{set,{var,9999},{call,bitcask_pulse,get,[{var,32},7]}},{set,{var,42},{call,bitcask_pulse,bc_close,[{var,32}]}},{set,{var,43},{call,bitcask_pulse,incr_clock,[]}}],{22840,31851,8451},[{0,[]},{1,[]},{errors,[]},{events,[]}]].
    [begin Now = now(), io:format("Now ~w ", [Now]), true = eqc:check(bitcask_pulse:prop_pulse(), [lists:nth(1, Cqq3), Now, lists:nth(3, Cqq3)]) end || _ <- lists:seq(1,5000)].