Change User and RemoteInstance objects to be asynchronously constructed

User and RemoteInstance objects had been using storage.load within their constructors.  Because storage.load is an async function, this resulted in User objects in the network.roster and RemoteInstance objects in the user.instances_ array that were not fully ready for use.

I've changed both User and RemoteInstance objects to have a static .create method, which acts as a factory, and returns Promises that get fulfilled when the User/RemoteInstance objects are fully ready for use.  This way we will no longer have any partially constructed Users in network.roster or RemoteInstances in user.instances_, and don't need public variables like isReadFromStorage.

This also fixes https://github.com/uProxy/uproxy/issues/721

Tested in Chrome, Firefox (UI still loads), updated "grunt test" to reflect new async behavior
Fulfilling regardless of ```storage.load``` behavior is maintained.  The difference between one clause or two is that if there's one ```then```, an error in ```remoteInstance.restoreState``` won't also be caught and masked over by the catch function.  You can remove a layer of promises here as well:

```javascript
var remoteInstance = new RemoteInstance(user, instanceId, data);
return storage.load(remoteInstance.getStorePath())
    .then((state) => {
        remoteInstance.restoreState(state);
        remoteInstance.readFromStorage_ = true;
        return remoteInstance;
    }, (e) => {
        remoteInstance.storageLookupComplete_ = true;
        return remoteInstance;
    });
```