Add bear_get_environ() and use it instead of the environ global variable
so that we can use _NSGetEnviron() on OS X where the environ global
variable is not available to shared libraries.
On OSX the loader respects other env variable than LD_PRELOAD.

The loader called 'the dynamic link editor'. Read `man dydl` for more.
Shortly instead of LD_PRELOAD it uses DYLD_INSERT_LIBRARIES, and
DYLD_FORCE_FLAT_NAMESPACE forces to use the overriden symbols.
Expected output is generated runtime at exec_anatomy test.

Depending on the OS not all exec call is available, therefore
can't hardcode what function calls shall the test expects.
Only wrap execve() on the Mac, all the functions call execve() there.
execvp() and execlp() when used will have duplicates if it has to search
the path unfortunately, because they loop through execve() trying each
possible path.  LD_PRELOAD on Linux doesn't end up wrapping the internal
calls, so that's not a problem for it.
Better solution to the execve() issue on the Mac.  Flag when we're in
an exec function and skip reporting any other calls.  Also implements
call_execvp() since the call does not have execvpe().
Only clear the in_exec flag if we set it.  Otherwise the first failure
in say execve() from an execvp() causes execve() to start printing.
Also fix typo in call_execvpe() from last commit, where I used "execlp"
instead of "execvp".
Use APPLE CMake variable instead of __APPLE__ to decide what
environment variables to use.
Have CMake detect _NSGetEnviron() and use it if found.
Rename the state flag already_reported and move the decision to
report into report_call() and the setting of the flag into report().
Add support for execvP() function.
try to hide exec reporting logic into functions
add more preprocessor guard on exec methods
Restore the call_execvp() function, execvpe() is not available on OSX
(or other BSD style platforms for that matter).
Make the documentation mention the method of operation on OS X.