next iteration: document.$initialize and model.create returns promise + some tests and fixes