Added explicit_bzero() as safe memset()

Calls to memset could be optimized away when they are at the end of the
variable lifetime, because the compiler knows that memset only modifies a
value of a variable and has no side-effects. So, if the variable is not
used anymore, the compiler might get rid of the "useless" memset.

Unfortunately, we really want this piece of memory zeroed out, because
otherwise it would stay in physical RAM. This is not part of the C
standard, so the compiler does not know that. So we have to convince the
compiler that optimizing these calls is a really bad idea which we
achieve with the volatile function pointer.

This commit introduced explicit_bzero() and replaces all calls to
memset() with the purpose of cleaning memory with this function. As a
defensive programming measure, I did this regardless whether the call
would have been optimized away or not.