Switch to a custom NotImplementedError derivative

When a feature or method is not implemented it's useful
to throw our own derivative of a NotImplementedError error
so that we can distingush these types of errors vs actual
usage of NotImplementedError which could be thrown from
driver or user code.

Change-Id: I8d5dfb56a254f315c5509dc600a078cfef2dde0b