experimental macro support

Eclipse internally works a lot with raw types or interfaces that don't support the methods one need, which means that one has to downcast a lot. Generally most of them are safe because there exists only one implementation to a given interface but to be on the safe side (especially for future version of Eclipse these runtime checks may file) you should always hide these casts with pattern matching and an Option type.

```
def annotationOf(a: /*Whatever type*/): Option[Annotation] = a match {
  case a: Annotation => Some(a)
  case _ => logger.error("wrong type for " + a); None
}
```

If it is important to get a Some back, you should also log an error or a warning.