The locking part has and I do know the answer to that....Using a configurable joint and setting x,y,z motion and/or angularmotion to Locked or scripting to z=0 in the update.
This works for the most part but I've found that when I drag my player object across a ground plane with a collider, that the Z-axis (for me) shifts ever so slighty, so a value set to 1000 will end up at 1003. This is enough to send my player off the boundaries of my game plane.
Does anyone know how to constrain it to a value and if the value ends up slightly off it is automagically reset to 1000.