Fail early if extension doesn't implement setup()

Fixes #813