Minimal promise implementation