Hi racerider, here are links to some of the drugs threads I've posted on. lazymum is right that I've had similar problems...
www.mumsnet.com/Talk/teenagers/1844039-Teen-son-finding-his-way
www.mumsnet.com/Talk/teenagers/1847677-13-years-old-doing-drugs-need-advice-please-HELP
www.mumsnet.com/Talk/teenagers/1410849-17yo-son-is-smoking-dope-How-do-I-handle-this
www.mumsnet.com/Talk/teenagers/1470983-18-year-old-son-threatened-about-drugs-any-advice
www.mumsnet.com/Talk/teenagers/1509902-Cannabis-dilemma-sorry-a-bit-long-different-than-the-other-cannabis-post
www.mumsnet.com/Talk/teenagers/1632544-Home-weed-drug-test-positive-result
Just to give you some hope... My DS was using a lot of drugs at 15-17: skunk daily, m-cat weekly then daily, and lots of other drugs when he could get his hands on them. His drug taking was out of control in a way your son's does not seem to be. And he did not have enough money, so he sold his things and then some of mine, and stole. He underachieved at school and then spent a nightmare year doing next-to-nothing. I threw him out twice and came within 24 hours of doing it for a third time and not letting him back.
Then, for various reasons (you will find out about some of them if you read the threads), he started to get his act together. He got himself onto a college course he wanted to do, and he started to do some work. Now, at 18.5, he is doing well at college, applying to uni, volunteering, and working part-time in a paid job. Thank goodness.
He is still using some drugs. He smokes cannabis, but no longer on a daily basis, and not skunk. I expect he would take other drugs if he was offered them at parties. But drugs are no longer running or ruining his life. Why? Well, I don't know for sure, but I think it has to do with aspiration. At 15/16, he couldn't see anything he wanted to do. At 18, he can. He has reasons not to mess up his life.
My experience tells me that the kids with aspirations do OK, unless they are very unlucky... The ones who crash and burn are those who have nothing to lose. Your DS, racerider, sounds like he's in the first group. Do everything you can to make sure it stays that way.