Made CreateInstance<T>() portable
Added abstract constructors
Revert "Made CreateInstance<T>() portable"

This reverts commit 2e6cc0606497d9653e533198d9f0916702af5de0.