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
Update createUser for different kernel statement types
Add createKernelSync function

This function is used to create an equivalent cuda '__syncthreads' call
in LLVM IR.
Add getGridSize function in IslNodeBuilder
Store isl_id of grid and block ids in kernel ast_node
Modify BlockGenerator to generate access from isl_id_to_ast_expr
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.
Update IDToValue with GPU ids stored in kernel node
Implement polly_stmt_build_ast_exprs
Add a Verifier pass to verify the subfunction.

To make sure that the generated bitcodes in ptx subfunction is valid.
Add getArraySize function
Add BaseAddresses to store host base addresses.
Implement copy data from and to device
Set host base address as copyFromDevice target address

This fixes test cases that an array is used both copy-in and copy-out,
except that it is unnecessary to be copied from cpu to gpu, e.g. the
matrix multiply case.