Gove LockInfo a Marshal method for easy serialization, and a String method for more readable output. Have the state.Locker implementations use LockError when possible to return LockInfo and an error.
Using NewLockInfo ensure we start with all required fields filled.
Output log output when testing is verbose