Optimize answering b_file_contents questions

sum_hash_from_file was reading files byte-by-byte.  Instead,
read many bytes into a buffer and operate on memory.  This
makes noop builds using ex1 (compiled with -O0) sub-16ms on
my Mac OS X machine.
Force assertions to be checked

B_ASSERT was calling the platform's assert() macro.  On
reasonable platforms, if NDEBUG is defined, assert() will
expand to a void expression.  This caused clang's warnings
to complain about unused variables, missing return values,
etc. because the assertions were being ignored and some code
relied on assertions.

To fix the problem, don't use the platform's assert() macro;
implement our own.
Remove trailing whitespace from source code

Hygiene.
Remove outdated workaround

_POSIX_C_SOURCE is being defined (in CMakeLists.txt) since
commit 716c54324839872fcb06e01e8ecea2414879a138.
Fix -stdlib= in CMAKE_SHARED_LINKER_FLAGS

The wrong -stdlib flag was being used in
CMAKE_SHARED_LINKER_FLAGS in almost all cases.
Create a shared library

If BUILD_SHARED_LIBS was falsy (default), we were only
generating a static library.  In the future, b will be used
by other projects (possibly in other languages), and dynamic
linking is easier in such environments.  Create a shared
library (CMake target 'b_shared').

This requires -fPIC on Linux (ELF x86_64).
Support multiple targets passed to CMake

This allows e.g.

    $ make TestProcess TestQuestionQueue

which will build both TestProcess and TestQuestionQueue.