I found that, even if "Command (complete path):" is selected (instead of "Default login shell (/usr/bin/login)") the shell is not started directly by Terminal but started via login (as "login -pfq username /path/to/the/shell").
Start Activity Monitor.app, and select "All Processes" from the pop-up menu at the top of the window. Then click onece or twice on the "PID" (title of the left most column of the process list) so that the process list is sorted in the decreasing order of pid (largest pid at the top of the list).
Also start Console.app, and select "All Messages" (or system.log) in in the left pane of the window.
Now start Terminal.app (or open a new window in Terminal). In my case, Activity Monitor shows "login", "zsh" (=my shell) and "taskgated" are started in this order, and taskgated terminates in a 10 seconds or so. Console.app shows the message like
DATE TIME login[62364]: USER_PROCESS: 62364 ttys000
Do you get this kind of log message? Any other messages (errors) in Console.app?
If you think "login" is hanging, then, in Activity Monitor, select the process "login" in the process list, push the "Inspect" button at the top of the window, and push the "Sample" button; you may need to enter the admin password. Then you will see some info about what the "login" is doing now. Does this give any hit about what is going wrong?
Are you using any special settings or third party software which might interfere with the authentication process?