Policy based locking


Add functionality so that there is a choice to use different options during each lock instance. Since locking around a single task (and not outside and within a task) won't cause data corruption when deadlocks are solved using super thread locking, some locks may want to be intelligently setup to allow this functionality while other locks may need to only detect and handle deadlocks at their own description.
The constructor will still take a default lock, and temporarily overriding this default will be an option, too.