That isn't true. He is responsible for his own choices.
Either he has had a complete breakdown in which case you should insist that he goes to the GP, tell them what he has done and get some help - or this is an escalation of his attempts to manipulate you in an attempt to get you to forgive and shut up.
None of this is your fault. Whatever the case is, it is still not your fault.
As to it not being him - it is him because he did it. Nobody slipped into his body and took control of it, did they? HE did it.
You need to accept that he did do this. It was him. It was his decision. The moment you were out of the way he, if you believe him, went and found drugs, got off his face and embarked on a week long sexual harassment of another woman, culminating in threatening her.
You say he is a good guy but does that sound like a good guy to you?
how can you possibly know that he does not play the good guy when you are around and that this too is part of who he is?
How can you know that he does not do this every time you are away?
It is very easy to sit here and say leave him, leave him. I know that. But you have had a huge shock, your world has crumbled around you and I bet more than anything you want to rewind to before you knew any of this and pretend.
But you can't pretend that he didn't do all this.
Your son's sake - again, what does your son need? A father in the house at any cost?
You don't even need to decide right now what you want to do. You have the option to ask him to leave in order to give you time to think.
If he has even one shred of respect for you, he will do whatever you need him to do and he will accept the consequences of his actions.
but do not twist or allow him to twist any of this into it being your fault. His choices are his own.