[WIP] Integrate and evaluate kernel fusion

This is an ongoing effort to integrate kernel fusion into the core framework. The basic steps are as follows:

- [x] Make OpenCL task core component
- [ ] Add another task graph analysis step to determine fusable tasks
- [ ] Retrieve kernel code and fuse them together
- [ ] Remove old tasks and insert fused task