This patch adds wrapper headers for <functional>
and a few others which is required to support
The basic idea is to make template functions
defined in these headers host device by pragmas.
Since this only works for libc++. The code is conditioned
for libc++ only. For libstdc++ it is NFC.
A test is added to llvm-test-suite for testing this: