Record thread ID and function entries

1. Recorded thread IDs in the log
2. Modified LogDumper and such to display this info
3. Instrument function entries so that we can later make DidAlias
context-sensitive
Made DidAlias context-sensitive

1. give each function invocation a unique ID
2. keep the invocation IDs in a thread-specific call stack
3. tag pointers with invocation IDs to distinguish pointers in different
invocations
Index active pointers by the invocation ID

so that we can quickly remove all pointers tagged with a specific
invocation ID
Change the value type of BeingPointedBy to DenseSet

The old type was vector, and it took linear time to find an delete an
element.
Say something about the deletion
Per-thread logging

Recording thread IDs makes recording much slower, and the logs much
larger. Therefore, we implemented per-thread logging in that each thread
will have a separate log.

Pros:
1. easy to process. Callstack can be easily constructed without
worrying about multiple threads interleaving.
2. smaller log size, because we needn't record thread IDs.
3. faster logging, because we needn't record thread IDs or acquire a
mutex.
4. faster processing speed, because we needn't keep track of the
callstack of each thread

Cons:
1. mask the missing aliases between different threads.
2. tracking def-use chains is not guaranteed to be faithful, because a
loaded value could come from another thread.
Avoid unnecessary logging of call

We only need to record all function calls in the diagnosis mode. This
change is included in one of the changes Junyang made on the master
branch. I hope it can be automatically merged by git.