Usable Abstractions for Secure Programming: A Mental Model Approach