Chain implememtations

Change in engine so the selected implementation is more abstract and has some kind of fall-back.

1. if intern or extern, try to get the specific implementation
2. else try to compile the body
3. else compile an error

The point is top prepare a future PR where intern and extern methods could provide an alternative (slow or degraded) implementation.