Changed AbstractScope to a module

Because modules are a better way to share code instead of treating
concrete classes as abstract when no such construct is supported by the
language itself