Returning a `Result` is backwards in thinking what one would expect as a return value from `try_lock`. I would expect some "thing" on success, and nothing on failure (because nothing happened).

Proper scoping allows for dealing with this:

```rust
{
    match lock.trylock() {
        Some(_guard) => { return do_critical_section(); }
        None
    }
}
// failed to get the lock
```

We should not be making odd function signatures to work around bugs in borrow checking. It's planned that borrowed values will have syntactical lifetimes (allowing the `None` case to use the lock) in the future. It's just not implemented right now.