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:
(www.rboyapps.com - Make your home your butler!)
Schlage and Yale locks are excellent options. However if you want just the basics you can look at Kwikset and pair with a very strong and reliable SmartApp for user management.
The one @tgauchat was referring to can be found here, it is the most reliable SmartApp for user management (checks for z wave failures to ensure codes are programmed) and works with the standard SmartThings device handler for a no hassles easy setup. Tons of features, you can get more details on our website; features include user scheduling (multiple schedules with start and end date/time), different types of users (permanent, scheduled, single use, user presence based, mode based etc), custom actions and unique to our app is the ability to assign custom actions for locks that support user code based locking (Yale calls it lock and leave and Schlage calls it one touch locking).
If you want to get into details of locks features check out this little table we put together that compares locks