refactor(lib): revamp the API using overloaded methods

This PR changes massively the API, but functionality is unchanged

- The `Properties` structs have lost their inherent setter methods like
  `font("Helvetica")`, `linewidth(2.)`. The replacement is the overloaded `set`
  method + newtype tuple structs. For example: `set(Font("Helvetica"))` and
  `set(LineWidth(2.))`
- Inherent configuration methods like `axis(Axis::BottomX, |a| /* ... */)`,
  `grid` and `key` have been removed in favor of the overloaded `configure`
  method. The signatures remain the same for `Axis` and `Grid`. In the case of
  `key()`, a `Key` unit struct has been added: `configure(Key, |k| /* ... */)`
- `Figure`'s inherent plotting methods like `curve`, `error_bar`, etc have been
  removed in favor of the overloaded `plot` method. The plotting data is now
  passed using a struct [variant]. The configuration closure remains unchanged.
- An `IntoIterator` trait has been added to the library. Functions that
  previously accepted iterators now also accept slices. This trait will remove
  in the future, when `IntoIterator` lands in stdlib.
- There is now a `prelude` module that contains the most common used traits,
  structs and enums. This module is meant to be glob imported in crates that
  link to this library.
- All functions now accept boxed or "unboxed" closures.

closes #13
closes #14
closes #15
closes #16
closes #17
closes #19
closes #22

[breaking-change]