Add IslPTXGenerator

IslPTXGenerator is used to generate llvm IR for both the host and
device.
Add struct gen_ext

This struct will be used to transmit all the output of the ppcg generated
isl* structures.
 - guard: guard of the host code.
 - tree: host code ast_node.
 - prog: gpu_prog struct.
Update generate_gpu to use gen_ext

So we can use gen_ext to output the generated ast_node and gpu_prog.
Add two flags for GPGPU codegen(isl)

 - enable-polly-gpgpu-isl: enable polly GPGPU codegen.
 - polly-gpgpu-triple-isl: set the GPU triple string.
Add dump_ast_node debug option
Add print_ast_node_as_c_format function
Add an IslPTXGenerator member to IslNodeBuilder
Trigger the gpgpu codegen in IslCodeGeneration::runOnScop
[Fix] Collect array and scopstmt info before collecting access
Update may_write and tagged_may_write calculation

In ppcg, may_write means all the writes (polly's may_writes plus
must_writes).
Set same ref_id to gpu_stmt_access and MemoryAccess
Add getHostGuard
Add createForGPGPU function to generate the LLVM IR
Add createKernelDomain, createKernelCopy and createKernelSync
Get the current llvm::Value of grid ids and block ids
Set correct Value for GPU ids before we call createUser

Fill in the IDTOValue with Values of block ids and thread ids and their
corresponding isl_ids.
Add missing {} to case statement
Add getGridSize function in IslNodeBuilder
Use malloced array rather than SmallVector to store isl_ids
Implement polly_stmt_build_ast_exprs