Collingwood stun Swifts to keep Finals hopes alive