A couple of suggestions that would help improving it:
Consider using line-circle intersection to allow multiple contacts per move step. You could then find the average direction normal to reverse the movement to. This will prevent clipping into walls when touching corners. I had an example that shows it: PlayCanvas 3D HTML5 Game Engine
Try not to use vector math in the transform chains, like .getPosition().sub(...). This will modify the internal vector of the entity, that stores the transform. It will often introduce visual bugs like erratic movement. A better way would be to copy it to some temp vector and modify that instead.