This adds unit tests (that will fail at compile time) if various structs don't implement the right interfaces for locking