re-organizing
doing a major refactor
focusing on type safety and complex type generation only.
the test function can still use testing.T to report results, etc...