I'm definitely not an expert but I thought I would chime in on your "arrays of arrays vrs matrices" question.
I recently developed a project where I started out using: Array{Array{Float64,1},1} as a container for a set of state vectors in an ODE flow. This seemed most natural but I figured once I got it to work, I would speed it up by representing everything in a compact matrix representation: Array{Float64,2}. However, I was never able to speed things up much with Array{Float64,2} over the Array{Array{Float64,1},1} container. I ended up with the impression (experts can confirm or deny this) that although Array{Float64,2} may be stored in memory more compactly than Array{Array{Float64,1},1}, the latter container is already very efficient so that any speed gains were marginal. Is this the experience of others? Cheers, Ethan