Fix two legit constant folding bugs:
1. split was way wrong, didn't consider some optional arguments may not
   be present.
2. pow(x,2) should fold to mul, but in the process it made a mul that
   had the wrong number of arguments.
Both were asymptomatic before, just for memory layout coincidence reasons,
but became noticeable with some combination of clang/libc++/Mavericks.
Fixes for clean compile against libc++
1. It seems more crash-inducing now to pass a NULL char* to tinyformat, so
   in two cases that we were unnecessarily taking the c_str() of a
   std::string, we now just pass the string itself (perfectly legal for
   Strutil::format/tinyformat, and solves the problem).
2. It was finding a certain way we called vector::insert to be ambiguous
   for vector<bool>. By changing those uses to vector<char>, it was fine.
libc++ cleanup: avoid nonstandard GNU extension __gnu_cxx::stdio_filebuf
that we used when not using Boost::Wave.  The fix is simply to force Wave
by default when we seem to be using libc++.
Also includes slightly more robust cmake detection of clang.
Switch blackbody test to output half, helps mask minor platform LSB diffs.