The work in this branch makes the timing function re-entrant. It is now
possible to do (Utils.time f x ~msg:"Timing f") where f does
(Utils.time g y ~msg:"Timing g") and time will properly print out the timing
for g and f (in that order) when f returns.