In an effort to give names to core concepts in the library, replace the
current way of passing around tuples (of varying length and content)
with appropriately named structs.
In the interest of keeping the patch focused: primarily replace internal
implementation of the added struct modules, and keep the interfaces for
creation, conversion (player v1 to v2, and vice versa), and field access
as they currently are.
1. `rating`, `rating_deviation`, and `rating_interval` all omit the
possibility of receiving a `nil` as the second argument.
2. Writing out `Result.t()` results in `dialyzer` looking for
`Elixir.Result.t()`, instead of calling the local
`Elixir.Glicko.Result.t()`.
Change the cases where a `do:` is followed by a `mix format` mandated
line break, or if the expression following the `do:` would span multiple
lines anyway.
The only exception to the rule above is the first change in the
changeset, as this was done for the function style of `initial_rating`
to be consistent with `initial_rating_deviation`.