option: rewrite the API to use composition
auto merge of #9359 : thestinger/rust/option, r=huonw

See #9355 for discussion.