Opt branch

@acroy, thanks for the nice work. I created a pull request, since this facilitates adding line comments to the code. Hence, see below for further comments of further potential comments.
This still first allocates a new vector for `amat*vm[j]` and then copies the contents of that vector to `p`. The better approach is
```julia
Base.A_mul_B!(p,amat,vm[j])
```