Label callback

This is related to #53
It allows callbacks as labels and defines a standard way of accessing them though the label method on the schema.

This is not fully backwards compatible as code that accesses the label though the schema will have trouble with the callback. However old code/projects won't break because as long as the schema was defined with a string nothing changes.