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
Add GMap member to store all the base addresses in NodeBuilder
Add function getDeviceArrayBaseAddressMap
Modify BlockGenerator to generate access from isl_id_to_ast_expr

Add member variable:
 - bool GPGPU
 - IslExprBuilder *Exprbuilder
 - isl_id_to_ast_expr *Indexes
Add a Verifier pass to verify the subfunction.

To make sure that the generated bitcodes in ptx subfunction is valid.
Implement copy data from and to device
Set original cpu 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.
Set the isl_options

Fix bug that polly generates different host ast node from ppcg.