improvements to option module

I didn't add an equivalent free function for `map_consume_default`, `mutate` and `mutate_default` because as far as I can tell the only purpose of the free function versions is backwards compatibility.

The `mutate` methods are based on a need I have in my balanced tree implementation, which arises from doing it entirely without `Copy`/`Clone`. It factors out variations of the following pattern which occurs many times:

    if foo.inner_option.is_some() {
        let inner = swap_unwrap(&mut foo.inner_option);
        inner = transform(inner);
        foo.inner_option = Some(inner);
    }