Fix user type mismatch in ProfileDAO implementation.

The methods getUserProfile(..) and updateUserProfile(..) now get ObjectId to identify the user and hence are getting instance of the right User's subclass.
Then calling getProfile() on Student, PHDStudent or Teacher will return right Profile object.