Bug1080756 - Move forward the loading of settings and ensure they're loaded before processing a call

If you're thinking about doing something like:

Settings.init().then(function() {
  // Continue app startup here after we have the settings values
});

It's true it would be simpler. But it would also impact negatively in the app startup time, for cases where it doesn't need to impact. Case in point, for push messages (incoming calls) we could do:

Settings.init().then(// Continue processing the push message here);

And the call time would be:

Call Processing Time = Settings BBDD Load time + Push processing time

On the other hand, using the solution proposed here, what we're doing is:

Settings.init(); // Launch asynchronously and return immediately
{ // start processing push...
...
...
// some point later, when we need the actual values:
  // check if the settings have been read, or wait)
}

Since the push processing has several asynchronous steps (connecting to the server to fetch the call data, for example) which happens *before* we need the settings data, for most cases the call processing time would be:

Call Processing Time = Push Processing time

That is, we don't impact the load time at all.

Also, there are three different promises because although the settings are stored and loaded as a single object value, they're returned as independent values. And so, it's simpler to do it this way (without changing lots of the existing logic).