#368: Use promise on modal creation

Return promise object that resolves with the modal object
Make callback optional