short-circuits for exact equality in mo_utils and code reuse

Routines in mo_utils could be simplified like this:

  logical elemental pure function equal_dp(a, b) result(boolean)

    real(dp), intent(in) :: a
    real(dp), intent(in) :: b

    boolean = (a == b)
    if (boolean) return
    boolean = .not. ((epsilon(1.0_dp) * abs(b) - abs(a - b)) < 0.0_dp)

  end function equal_dp


  logical elemental pure function greaterequal_dp(a, b) result(boolean)

    real(dp), intent(in) :: a
    real(dp), intent(in) :: b

    boolean = equal_dp(a, b) .or. (a > b)

  end function greaterequal_dp