I was well aware of this, but assumed that since it was such a grotesque layering violation it was not an acceptable option. The first is pretty obvious. The second is slightly subtler. In the server it sounds as though you're merging all the layers into one to avoid the problem, which isn't pretty though I suppose that's more of an implementation issue. Cleaner, simpler, can be done by clients without altering the protocol.
Someone can break the encryption key then attack the password using brute force.
One possible way to implement it would be to add a field in the data fed into the handshake hashes to for the password, if password authentication is supported. Protocol changes required. Applications could get the master secret and hash the password with it, then send the result across the wire. Whether passwords have to be protected from brute force attacks. Its only real advantage is improved performance.