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:

class Foo {
  public:
    Foo(int v) : m_v(v);
  private:
    int m_v;
}

Foo makeFrobbedFoo(int *errno)
{
  *errno = 0;
  return Foo();
}

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().
Refactor UncompressBlockContents to return a BlockContents to use return-value-optimizations
Refactor DecompressBlock to take advantage of return value optimizations
Refactor ReadAndDecompress* to use return value optimizations
Refactor ReadBlockContents to use return value optimizations
Refactor ReadMetaBlock
Implement a simple BlockContents constructor
Add a const char* BlockContents constructor
Drop BlockContents::heap_allocated finally
fix tests
rename for sensibility
Drop use of DecompressBlock
missing delete[]
Drop ReadAndDecompress* and a whole bunch of no-longer-needed complexity
drop useless const from allocation
Drop another sketchy looking delete_contents_after_use
Now we can release our memory
Unify code paths in ReadBlockContents with move semantics. All leaks plugged.
Add some sensible defaults to BlockContents()