Iwillig/xhr promise

@bcamper