Use late static binding to simplify ValueVariable::introspect()
Split up different types of variables