Use cargo commands to update the crates.io index. This allows us to eliminate the dependency on ureq, which in turns means we can finally build the crate tool with Soong. Also refactor "success_or_error" trait into a separate crate. Also add doc strings and fix clippy lints to make Soong happy. Test: CARGO_HOME=/tmp/blah ./crate_tool analyze-import ureq Change-Id: Ibceb73f786533d123bb7cf0522b580fad882a36c