Hearts showed they might just be title contenders as they stunned Celtic to move eight points clear at the top of the Premiership.