Abstract API term normalisation

Closes #20