Add a bunch of assertions to ensure we're doing the right thing. Also,
rename movePointer to replacePointer, since the old name didn't make
much sense.
The Blocks runtime provide a header named Block.h.
It is generally preferable to avoid name collision with system headers
(reducing reliance on -isystem order, more friendly when navigating files in
an editor, etc).
Reviewed By: gribozavr2
Differential Revision: https://reviews.llvm.org/D74934