Added transform3d Intermediate

This api allows the user to choose the order of how the transformation is applied. For example, the translation can be done before to translation, or operations can be skipped entirely.

```rust
// rotate the object then translate
let t_mat = t.rotate().translate().to_mat4();
// translate the object then rotate it
// this has the effect of rotation the translated object around an axis
let t_mat = t.translate().rotate().to_mat4()
```