WIP: Refactoring Multivariate Normal distributions

After refactoring, the class hierarchy would look like:
```julia
abstract AbstractMvNormal <: ContinuousMultivariateDistribution

# Here, ZeroVector is an empty type that indicates a vector is zero. 
# Some operations are defined to make the interactions with zero vectors easy:
#
#  + (x::Vector, z::ZeroVector) = x
#
# This type subsumes both zero-mean and non-zero-mean cases, while makes it possible
# to seamlessly leverage the zero-mean-case to simplify computation
#
immutable MvNormal{Cov<:AbstractPDMat,Mean<:Union(Vector{Float64},ZeroVector{Float64})} <: AbstractMvNormal
    μ::Mean
    Σ::Cov
end

immutable MvNormalCanon{Prec<:AbstractPDMat,HVec<:Union(Vector{Float64},ZeroVector{Float64})} <: AbstractMvNormal
    h::HVec
    J::Prec
end
```
Not finished yet, still ongoing work.