strongly type attributes

**please review**
shouldn't `toString` be a non-static method on `Key` and `Annotation`?