Camera Tracking 360 Degrees On X, Y, Z Axis
I solved the 180 camera flip problem by duplicating my camera and switching the active camera. Here is how it works for anyone new to 3D camera animation like myself.

I created four separate empty cubes named CameraFocus, CameraTrack, CameraTarget_Y, CameraTarget_-Y, and then three cameras named Camera_Y, Camera_-Y and StationaryCamera.

I parented Camera_Y to CameraTarget_Y and then parented Camera_-Y to CameraTarget_-Y.

Then I parented CameraTarget_Y, CameraTarget_-Y and StationaryCamera to CameraTrack by selecting them all, selecting CameraTrack last, and pressing Ctrl-P. Then I added two Locked Track constraints to each CameraTarget_Y and -Y, like this:

CameraTarget_Y:
Locked Track: 1
Target: CameraFocus
To: Y
Lock: X
Locked Track: 2
Target: CameraFocus
To: Y
Lock: Z
CameraTarget_-Y:
Locked Track: 1
Target: CameraFocus
To: -Y
Lock: X
Locked Track: 2
Target: CameraFocus
To: -Y
Lock: Z

I had to set the Camera_Y x-axis to rotate 90 degrees to point it at my CameraFocus. Then I set the z-axis of Camera_-Y to 180 degrees and added a Copy Rotation constraint to copy Camera_Y's x, y and z inverted rotation in local space and checked the offset. So now I have two cameras that point to the CameraFocus but they are mirrored on the x-axis.

Now I can use the Follow Path constraint to make the CameraTrack follow a path while tracking my CameraFocus. I can also keyframe the CameraFocus to move or set it to follow it's own path.

The 180 camera flip happens when the CameraTrack is parallel to the zero x-axis and crosses the y-axis because the Locked Track direction and 'up' values cannot be parallel. When To: is Y or -Y and Lock: is also Y the Locked Track doesn't know where to point so you end up with the 180 camera flip.
But we now have two cameras that are mirrored on the y-axis, so when they flip just switch cameras by setting a marker in the timeline with M and then Ctrl-B to set the active camera.

If the camera flip is instantaneous you can simply switch from Camera_Y to Camera_-Y or vise versa. If it's not instantaneous, key frame the StationaryCamera to match the rotation to the active camera and set the StationaryCamera as the active camera. Move the timeline to when the cameras have completed their flip and key frame the StationaryCamera to match the rotation of the opposite camera of the previously active camera and set that camera to the active camera.

And viola, a professional Hollywood camera dolly system that can rotate around the x, y and z-axis simultaneously with no 180 camera flips. I can move the CameraFocus by key framing it or constrain it to follow it's own path to create smooth curving camera pans. And since the CameraTarget_Y and -Y handle the camera tracking, the cameras themselves are free to pan and roll independently if needed. Just remember when you switch Camera_-Y to the active camera and you want to pan or roll Camera_-Y, you will actually need to rotate Camera_Y to keep them in sync. Hope this helps someone else out there.