I have never posted on this exchange before - but I read this and couldn't help myself.
Let me first say I have no background in parenting other than raising my 2 children. I have read no parenting books nor think I am the best parent in the world.
If I was in your situation I would kick him out. Simple and plain. He is an adult and you are no longer responsive for raising him. Your job is over. When I say kick out I do not mean give him time to find a place, help him with rent, or any of that bull s***. I mean get him out that day. But it sounds like you have a history of letting him walk all over you so you probably wontwon't do that. The reason I say "have a history of getting walked on" is because if he has the gall to speak to you like that - it didntdidn't develop overnight. Also the fact that he speaks to you like that reflects on your parenting...You need to grow a pair and be hard on the little ******.
If he needs help then he needs to learn how to treat those who help him with respect. I bet if he treated anyone else the way he treats you - especially in their respective houses - not one person in their right mind would put up with it. It is your job as a parent to prepare him for the harsh reality of the world - and coddling him will not do that.
Don't worry about him liking you - either he will grow up or he will not. Plus he will always love you despite what you may think.