intrusive class support

* intrusive classes own their backing memory
* migrated union size generation to template meta programming (need
  compile time size)