[Core] Allow weak symbols in shared library when linking.

Patch by Rui Ueyama.

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@180209 91177308-0d34-0410-b5e6-96231b3b80d8
[Core] Properly stop the ThreadPoolExecutor and use the ConcRT memory allocator.
[ELF] Initialize readers and writers on creation.

This makes the target handler a constructor argument because the constructor of
OutputELFWriter relies on it being initialized.
[Driver] Parallelize reading initial object files.
[Driver] Add maximum concurrency option.
Instrument things.
[Passes] Parallelize the layout pass sort.
[ELF] Make addressOfAtom thread safe.

The expression _atomToAddressMap[atom] may modify _atomToAddressMap.
[Core] Add parallel_for_each.
Parallel write.
[Core] Add ConcurrentUnorderedSet.

This is a a Split Ordered List based lock-free unordered set.
Parallelize reading archive members.
Map. Still duplicates way too much code. WILLFIX.
Don't mmap files multiple times.
[Core] Add ConcurrentUnorderedMap.
Think about making X86_64TargetInfo concurrent.
Start working on a thread local region allocator.
Allocator stuff.
Use getMSBIndex.
Finish up the allocator stuff.