Refactor PerfStepTimer to automatically stop on destruct

This eliminates the need to remember to call PERF_TIMER_STOP when a section has
been timed. This allows more useful design with the perf timers and enables
possible return value optimizations. Simplistic example:

```c++
class Foo {
  public:
    Foo(int v) : m_v(v);
  private:
    int m_v;
}

Foo makeFrobbedFoo(int *errno)
{
  *errno = 0;
  return Foo(1);
}

Foo bar(int *errno)
{
  PERF_TIMER_INIT(some_timer);

  return makeFrobbedFoo(errno);
}

int main(int argc, char[] argv)
{
  Foo f;
  int errno;

  f = bar(&errno);

  if (errno)
    return -1;
  return 0;
}
```

After bar() is called, perf_context.some_timer would be incremented as if
Stop(&perf_context.some_timer) was called at the end, and the compiler is still
able to produce optimizations on the return value from makeFrobbedFoo() through
to main().
Not quite. Once PERF_TIMER_STOP is called, the timer will not update counters upon destruction:

https://github.com/facebook/rocksdb/pull/242/files#diff-62dc0c9a1ea8f4f54dc8848b8ae4177eR50

Calling Stop() sets start_ to 0. The next time Stop() is called, start_ evaluates to false so the counter is not updated. Stop() is called here:

https://github.com/tdfischer/rocksdb/blob/perf-timer-destructors/db/db_impl.cc#L3999

Any destructors called after that line will not result in metrics being updated.