Patrick,

1. It would be nice to enumerate the joint names from the parameter
server so as to avoid hard coding them in several places.  But at the
moment, all the joint controllers hang off the root namespace.  I tried
placing them all under their own namespace (e.g. "/ax12_controllers") by
using the "ns" keyword in the launch file, but when I did that, the
controller_spawner.py node would just hang instead of firing up the
various controllers.  Hope that makes sense!

I don't have a servo to test this or your launch file to look at, but here's what might be happening. I assume you pushed controller parameters (yaml config files) and controller_spawner node into /ax12_controllers namespace, but the controller_manager still starts up in global namespace. If that the case, then controller_spawner node hangs until start_controller service is advertised. Since controller_manager was started in global namespace that's where start_controller service lives (e.g. start_controller/ttyUSB0), but spawner is only looking for it in its parent namespace (e.g. /ax12_controllers/start_controller/ttyUSB0). So I  would try starting everything (manager, spawner and controller params) under ns tag. I will put some log messages into spawner node, so it doesn't look like it just hangs while it's waiting for some services to become available.
 
2. Suppose I want to start with a very simple inverse kinematics problem
without doing the full arm navigation stack. All I want to do is place
the tip of the hand of my robot at various places in space without
regard to the orientation of the hand.  Is it possible to have the arm
kinematics solve just this 3-DOF IK problem rather than the full 6-DOF
IK problem?

I am not sure about arm_kinematics, but OpenRAVE can do position only IK with its ikfast module. I did something similar for SmartArm, look here: http://code.google.com/p/ua-ros-pkg/source/browse/#svn/trunk/arrg/ua_controllers/smart_arm_kinematics.
 
Anton