Most of the locks that can work with SmartThings will give you everything that you listed except you will have to use custom code in order to get some of the notification features and to manage the user codes.
There are several custom code options available for locks. I think the two most popular are the ones that have already been mentioned in this thread. Lock Manager, which is free, and one from Rboy, which has a license fee.
Using custom code in SmartThings is pretty straightforward: basically you copy the author’s code and paste it into your own account. Here’s the FAQ for that process if you’d like to read more about it.
As for where you find the code to copy, there are many community members who enjoy writing code. Most will share it for free with other community members; some charge a small license fee. You can find these on the quick browse lists in the community – created wiki. For example, in this case you would look in the smartapp list for locks.
So to summarize: you aren’t going to find anything that matches your list of requirements if you just read the lock descriptions, because the official SmartThings lock integration does not provide user code management at the present time.
However, one of the strengths of the SmartThings platform is that it is easy for customers to write their own code to extend the features available in the official integration. And in the case of locks, there are already several popular options available for exactly the features you want to see.
For discussion of specific lock models, see the following: