Move the Basis trait inheritance from VecExt to AlgebraicVecExt.

The Basis trait cannot be implemented if the vector is not algebraic anyway.
Move the Round trait inheritance from VecExt to AlgebraicVecExt.

What it the point of rounding an integer-valued vector?
Add pointwise multiplication and division for vectors.
Add some impls for 4d rotations.

It is not possible to create a 4d rotation yet.
Huge api change!

Everything changed, hopefully for the best.

* everything is accessible from the `na` module. It re-export
  everything and provides free functions (i-e: na::dot(a, b) instead of
  a.dot(b)) for most functionalities.
* matrix/vector adaptors (Rotmat, Transform) are replaced by plain
  types: Rot{2, 3, 4} for rotation matrices and Iso{2, 3, 4} for
  isometries (rotation + translation).  This old adaptors system was to
  hard to understand and to document.
* each file related to data structures moved to the `structs` folder.
  This makes the doc a lot more readable and make people prefer the
  `na` module instead of individual small modules.
* Because `na` exists now, the modules `structs::vec` and
  `structs::mat` dont re-export anything now.

As a side effect, this makes the documentation more readable.
Fix typos on the readme.
Fix the example given by the readme.
Add the "nalgebra in use" part to the readme.
Use `use` instead of `pub use` to import modules on the examples.
Update to the last Rust.

Also use free-functions on tests.
Add a one-line description to each free-function.

This is better than nothing.
Add a link to the on-line documentation.
Re-add look_at methods for isometries.
Re-export the Identity type properly.
Add a double-trait-dispatch-trick based cast trait

The Cast trait replaces both MatCast and VecCast.
Remove unused import.
Dont re-export std::num::{Zero, One}.

This is useless.
Replace `rust build` by `rustc`.
Api change: deal with inplace/out of place methods.

Before, it was too easy to use an out of place method instead of the inplace one since they name
were pretty mutch the same. This kind of confusion may lead to silly bugs very hard to understand.
Thus the following changes have been made when a method is available both inplace and out-of-place:

* inplace version keep a short name.
* out-of-place version are suffixed by `_cpy` (meaning `copy`), and are static methods.

Methods applying transformations (rotation, translation or general transform) are now prefixed by
`append`, and a `prepend` version is available too.

Also, free functions doing in-place modifications dont really make sense. They have been removed.

Here are the naming changes:
* `invert` -> `inv`
* `inverted` -> `Inv::inv_cpy`
* `transpose` -> `transpose`
* `transposed` -> `Transpose::transpose_cpy`
* `transform_by` -> `append_transformation`
* `transformed` -> `Transform::append_transformation_cpy`
* `rotate_by` -> `apppend_rotation`
* `rotated` -> `Rotation::append_rotation_cpy`
* `translate_by` -> `apppend_translation`
* `translate` -> `Translation::append_translation_cpy`
* `normalized` -> `Norm::normalize_cpy`
* `rotated_wrt_point` -> `RotationWithTranslation::append_rotation_wrt_point_cpy`
* `rotated_wrt_center` -> `RotationWithTranslation::append_rotation_wrt_center_cpy`

Note that using those static methods is very verbose, and using in-place methods require an
explicit import of the related trait.

This is a way to convince the user to use free functions most of the time.
Remove free-functions alliasing structures constructors.

Those constructors are not idiomatic. Use e.g. `Vec3::new(0, 0, 0)` instead.