Refactor scala reflection

Additionally refactor ScalaReflection to support compile time reflection (alternative or complementary to #6)