Relax dimensionality requirements in `A*_mul_B*!` and `transpose!`

This implements support for various pre-allocated operations with `Vector`s that were formerly supported only for `Matrix`es. As a prototype of what this was designed to solve, this works:
```
julia> v = rand(5)
5-element Array{Float64,1}:
 0.5895  
 0.912975
 0.225657
 0.944821
 0.663553

julia> C = v*v'
5x5 Array{Float64,2}:
 0.34751   0.538199  0.133025   0.556972  0.391164
 0.538199  0.833523  0.206019   0.862598  0.605807
 0.133025  0.206019  0.0509211  0.213206  0.149735
 0.556972  0.862598  0.213206   0.892687  0.626939
 0.391164  0.605807  0.149735   0.626939  0.440302
```
but
```
julia> A_mul_Bt!(C, v, v)
ERROR: `A_mul_Bt!` has no method matching A_mul_Bt!(::Array{Float64,2}, ::Array{Float64,1}, ::Array{Float64,1})
```
With this pull request, such operations are supported.

CC @andreasnoack, @Jutho.