* Fix getopts version
The pinned version does not compile anymore because of mutable aliasing:
* https://github.com/rust-lang/getopts/pull/61
* https://github.com/rust-lang/getopts/issues/110
This was achieved by temporarily setting the getopts version to "0.2.21"
in Cargo.toml, and running `cargo check`.
Note that this also converts the Cargo.lock to a new format.
* Fix warning: Instead of deprecated macro try!, use question mark operator
* Fix warning: Avoid anonymous parameters
* Fix warning: Use dyn on trait objects
* Fix warning: Avoid unneeded mutability
* Fix warning: Avoid redundant format in panic or assert
* Fix lint: Avoid redundant field names in initializers
* Fix lint: Avoid redundant clone
* Fix lint: Avoid literal cast
* Fix lint: Collapse if/else where applicable
I left some if/else branches in place, if there was a certain symmetry between the branches.
* Fix lint: Avoid needless borrow
I left some if/else branches in place, if there was a certain symmetry between the branches.
* Fix lint: Use cloned instead of custom closure
* Fix lint: Avoid unneeded trait bound
* Fix lint: Avoid unneeded trait bound (2) avoid redundant clone
* Fix lint: Use &[T] instead of &Vec<T>
* Fix lint: Avoid & on each pattern
* Fix lint: Avoid manual assign
* Fix lint: Use implicit return
* Fix lint: Merge if/else branches with same value
I left one complicated branch in place.
* Fix lint: Use is_empty instead of comparing len against 0
* Fix lint: Use sum instead of fold
* Fix lint: Avoid clone on Copy types
I also replaced the callback architecture behind
`PublicInformation.ask_questions()` with a simpler method
`PublicInformation.ask_question()` that gets called repeatedly.
To make all float-based sorts easier, I used the `float-ord` package.
I also used it to clean up some of the sorting in `decide_wrapped()`.