various changes to fusion and structs, enabling tpch Q2
Merge branch 'merge-checkpoint' into optiql-datastruct-wip

Conflicts:
	src/common/LoopFusionOpt.scala
	test-out/epfl/test7-fusion21.check
	test-src/epfl/test7-analysis/TestFusion2.scala
Merge remote-tracking branch 'origin/optiql-datastruct-wip' into optiql-gpu

Conflicts:
	build.sbt
	src/common/ArrayBufferOps.scala
	src/common/ArrayOps.scala
	src/common/HashMapOps.scala
	src/common/IfThenElse.scala
	src/common/SimplifyTransform.scala
	src/common/StringOps.scala
	src/common/Structs.scala
	src/common/SynchronizedArrayBufferOps.scala
	src/internal/CudaCodegen.scala
	src/internal/Effects.scala
	src/internal/FatCodegen.scala
	src/internal/GPUCodegen.scala
	src/internal/OpenCLCodegen.scala
	src/internal/Transforming.scala
	test-out/epfl/test9-struct2b.check
	test-out/epfl/test9-struct3.check
	test-out/epfl/test9-struct4.check
fixing tpch-q1
working q1
Add GPU HashReduce
minor cleanup to Structs
OpenCL support checkpoint
Add Accelerator Model
Merge branch 'delite-develop' of https://github.com/TiarkRompf/virtualization-lms-core into delite-develop-c

Conflicts:
	src/internal/CCodegen.scala
	src/internal/GPUCodegen.scala
	src/internal/OpenCLCodegen.scala
Add support for C++ target
Support for C++ object types
Minor changes to codegen (TODO: remove changes for multiloop to Delite)
add access for kernel inputs and outputs, changes for c++ multiloop
merge with develop
Emit recvUpdate functions
More C++ generation
Minor bug fix for transfer functions
Fix for C++ nested template types
ArrayOps C++ codegen