[Fix] Generate correct loads for multiple arrays in kernel
Add flags for GPGPU code generation

 - polly-use-private-memory: use private memory for kernel code
   generation.
 - polly-use-shared-memory: use shared memory for kernel code
   generation.
 - polly-live-range-reordering: allow successive live ranges on the
   same element be reordered.
Update address space of kernel parameters to global memory
Add createLocalVariableDefinitions

This function is used to create GPU local variables, i.e. for shared
memory array or private memory definitions.
 + Add static function getLLVMTypeByName - use this function to get
   the llvm::Type of a type string. (This is a ugly and temporary
   solution.)
Add createKernelCopy function

This function is use to create LLVM IR for copy statement in a kernel
when shared memory or private memory code generation is enabled.
Add eraseSharedMemoryBases

This function is used to erase all the allocated shared memory from the
host module after the complete of the GPGPU code generation.
[Fix] Fix extractArraysInfo in case array base not Global Variable
Update for  llvm::DataLayoutPass.
Update for llvm api changes