Uptream for Clang: Instrument code around 'new' and 'delete' expressions to skim allocated types and sizes.

This is not for commit.

It changes Clang to inject functions '__op_new_intercept__' and
'__op_delete_incercept__' around 'new' and 'delete' expressions
to skim allocated types and sizes.

This feature is enabled by a compiler option -fintercept-allocation-functions.
Nothing changes without this option.

The injected functions should be declared as follows.
void* __op_new_intercept__(void*, const std::type_info&, size_t);
void* __op_delete_intercept__(void*, const std::type_info&[, size_t]);

operator new(...) calls are replaced to
=> __op_new_intercept__(operator new(...), type, size)

operator delete(ptr [, size]) calls are replaced to
=> operator delete(__op_delete_intercept__(ptr, type[, size]) [, size])

BUG=123758
Factor out LookupAllocatorIntercept.
Nit fix.
Fix.
Fix.
Rename the commandline option.
Refactoring: renaming.
Added some comments.
Support virtual delete.