There's a couple of ways to go about this. The simplest is just to differentiate the latitude and longitude given by GPS, and that'll give you your x and y. GPS altitude isn't really accurate enough to give a z, so for that you need an airspeed, from something like the pressure sensor sold on this site. Then just compare the airspeed, which is sqrt(x2 + y2 + z2) to the groundspeed, which is just sqrt(x2 + y2), and from the difference between the two you can get your z velocity.
Most gps chip sets will give you ground speed and course.. Easy to get x and y from that. GPS altitude may not be sensitive enough for what you want for z (depends on how tight you want your altitude hold to be). If not then look at absolute pressure or ultrasonic sensors.
While the absolute error for GPS chips can be quite big, their drift in the short term (minutes) is very small. So for distances relative to the start point, they are pretty good. You need to be outdoors and have very good sat readings.
That said, you're reqs are probably pretty tight and for testing you will need a system that will work indoors (for testing at least). Then it is pretty much image flow that you need to use, like the parrot quad copter (at CES). They use a downward facing camera and process the image into, I think, 16 sectors. They then find edges or other distinctive features in the image and compare XY positions of those from frame to frame to determine orientation and movement.