fix(memory): increase memory counters by the actual size of reallocated memory

On OSX, we had a test failure on memory module. The problem was in
the realloc function (line 38):

    void * realloc(void * ptr, size_t sz) {
        size_t old_sz = malloc_size(ptr);
        g_global_memory.dec(old_sz);
        g_global_memory.inc(sz);
        g_thread_memory.dec(old_sz);
        g_thread_memory.inc(sz);
        void * r = realloc_core(ptr, sz);
        if (r || sz == 0)
            return r;
        else
            ...

The size of r could be bigger than sz. For instance,

    |ptr| = 40 but |r| = 48

In the current code, here we only increase counters by 40.
But later when we free it, we decrease them by 48, and this
caused the problem, underflow of an unsigned counter in
g_global_memory.
chore(memcheck): add another memcheck.supp entry for tcmalloc bug

suppress a valgrind warning we had on "normalizer" testcase (only with g++-4.8.1)
test(buffer): add tests for improving coverage

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
test(exception): add tests for improving coverage

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
fix(kernel): the hash code of expressions was not being used to compare them

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>