Remove most of the specialisations; instinct is that fewer code-paths are better and that if it turns out to be a compilation bottleneck then it can be easily dealt with