QR decompostion

julia> t = Tensor(rand(2,2,2,2), [:i,:j,:k,:l]);
julia> q, r = tensor_qr_thin( t; inds_q = Index.([:i, :k]), inds_r = Index.([:j, :l]), ind_virtual = Index(:x) );
julia> q2×2×4 Tensor{Float64, 3, Array{Float64, 3}}: [:, :, 1] = -0.0642326 -0.451842 -0.664602 -0.591622 [:, :, 2] = -0.496444 -0.123538 -0.493912 0.703088 [:, :, 3] = 0.784451 -0.465628 -0.110432 0.394502 [:, :, 4] = -0.366134 -0.750845 0.54969 -0.00430077
julia> r4×2×2 Tensor{Float64, 3, Array{Float64, 3}}: [:, :, 1] = -1.36281 -0.375719 0.0 -0.0888963 0.0 0.0 0.0 0.0 [:, :, 2] = -0.546235 -1.08848 -0.515815 -0.0187884 0.289563 0.231799 0.0 0.257005