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.