Add early not-implemented checks
If a function does not support the requested operation then it must return quickly to avoid delaying the fallback option.
Changing the order of parameter checks caused some tests to fail, so the tests have been changed to avoid failing the not-implemented check.
This change causes the coverage metric to decrease because some branches are now unreachable