I recommend a sit down talk with him, ask him not to talk, but to LISTEN, and tell him exactly what you've written here. I'm sure that you've told him already, but tell him how it makes you feel. Any caring boyfriend wouldn't want to deliberately make their girlfriend feel this way, and would modify their behaviour accordingly.
Likewise... you might want to have a word with her as well. On one of your shopping trips, why not tell her how irritating you and your boyfriend find it when she nuzzles in on your private time? And then STOP going out with her. WHY are you making it easy for her to be around you and your boyfriend? You're giving her the 'go ahead' to spend more time with you both (him really!). Why are you going shopping with her, and spending time with somebody who, if you're honest, you dont actually like.... and why would you? She is thwarting your relationship with your boyfriend, and probably LOVING it that shes causing problems between you. And all the while thats happening, she makes herself the 'fun' girl to be around, and you the 'bunny boiler' girlfriend. And potentially making it easier for your boyfriend to make some choices!
Tell you what... why dont YOU get yourself a male 'friend' and start going out with him. Tell your boyfriend that its ok, as you're only friends, and he ought to understand that, as HE has a female friend as well. Wonder how he'd take to that idea?
However, do try to bear in mind that you're 18, and the chances are (fingers-crossed) that he's just one of many many boyfriends you'l have before you settle down with the right one. And if he's causing you so much grief ... he's clearly not mr right... just mr right now. As much as you love him now... I'm guessing that there is an end to this. Bet you know that too really deep down.
A good relationship just shouldn't be this hard work chick.