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.
`hm[1:j,1:j]` creates a copy :-), and then another copy by multiplying it. If you look at the code of `expm(A)` in julia, you see it actually calls `expm!(copy(A))`. Since you don't want to overwrite `hm`, but `hm[1:j,1:j]` is already a copy, you could use
```julia
Base.LinAlg.expm!(scale!(tsgn*tau,hm[1:j,1:j]))
```
The only problem might be when julia switches to returning views. The safer approach might be
```julia
Base.LinAlg.expm!(scale(tsgn*tau,slice(hm,1:j,1:j)))
```
where you trust on the `scale` function to create the copy.