[WIP] Heat support

This is just the beginning of Heat support in this SDK. Please review for style and design but not necessarily for completeness. There is much work still remaining. I'm submitting the PR early so as to detect and fix issues early rather than at the very end.

Again, this is very much a work in progress. When the PR is ready for a final review and merge, I will remove "[WIP]" from the title.