XMLHttpRequest abstraction with a simple promise chain