This ended up involving some pretty major refactors and fixed a bug where passing extension types as parameters to `execute` broke. Closes #56