[sanitizer] Improve scanf interceptor

This a rewrite of the scanf parser. The new implementation is pretty close to
the spec, with a few shortcuts taken here and there. It is conservative, i.e.
it gives up parsing if it does not understand some part of the format string,
or runs into an ambiguous % spec. It does not handle some rarely used parts of
the spec, like %n$ - for now.

I'm also moving parser call to after the original *scanf function completes,
so that we can find out the store size of %s directive by the use of strlen()
on the target buffer.



git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@174704 91177308-0d34-0410-b5e6-96231b3b80d8
[sanitizer] Add 2 random tests for the scanf implementation.


git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@174705 91177308-0d34-0410-b5e6-96231b3b80d8
[ASan] Move functions using BitScan/clzl to sanitizer_common

git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@174706 91177308-0d34-0410-b5e6-96231b3b80d8