James Harden scored a game-high 42 points as the Houston Rockets beat the Celtics 116-105 to snap Boston's seven-game winning streak.