Timekeeping fix

floats and doubles were poor choice for storing time. Now they are
internally stored as longs, still exposing float interface