Fix bug: get the correct memory size for memcpy

GPU memcpy size should be array length multiplied with element type size.
Fix comments that demo the usage of the GPURuntime library
Set initial value 0.0 for ElapsedTimes and 0 for ParamOffset
Call createCallSetBlockShape before start GPU timer
Seperate freeDeviceMemory from cleanupGPUResource

Update GPURuntime library so that we can free multiple device arrays
and parameters.
Add missing header include for <assert.h>
Fix bug: generate incorrect loads for multiple arrays in kernel