Merge pull request #187 from nierob/master

Model improvements.
Do not use a functor for attached data update in EnginioModel

Besides being overkill for this purpose, in it's used form it does
only build with C++11 enabled because of the anonymous template
argument type.
It is enough to simply pass the row number to the function instead
of a functor.
Fix typos and unused variable warnings

Rename 'removeDelyed' to 'removeDelayed' and move the assert
for the empty object id out of delayedOperation.
Initial websocket notifications experiment

Add EnginioBackendConnection which implements a minimally needed
WebSocket protocol to be able to read incoming messages from a
specified backend.

Add a test to set up a backend and test if we receive all the
notifications about the changes.
The backend has to be set up with the additional option:

settings: {
    websocket: true  # this enables websocket notifications
}

This currently only works with the staging server.
Make EnginioBackendConnection aware of close status

Add WebSocketCloseStatus and handle close messages from
the server as a first step for closing handshake.
For now we only print the closing status for debugging purposes.
Implement closing handshake for WebSocket protocol

This patch adds frame header construction and client-to-server
payload masking support to the WebSocket implementation which
makes it possible to send messages to the server.
Implement closing handshake to properly close the connection
with the server and add more tests to increase the test coverage.
Merge pull request #189 from bbandix/enginiomodel

Enginiomodel fixes
Fix warnings about string literals in EnginioBackendConnection.
Fix WebSocket key generation and move it to a static member

The key can be used as a unique key later for end-to-end identification
of requests, and to filter out notifications caused by own REST API calls.
We should not create a human readable key, since it is 32 byte, but rather
generate an RFC4122 compilant 16 byte nonce as the WebSocket standard says.
Also change the masking key generation to use the first 4 bytes of a newly
generated binary UUID instead of using the beginning of the WebSocket key.
Use https://staging.engin.io for the notifications test

This makes it possible to run the notifications test in an
env that was set up for the production server by explicitely
using the staging server url instead of the one specified by
the env variable.
Merge pull request #188 from bbandix/websocket

Initial websocket notifications
Cleanup tst_Files::fileUploadDownload.

Fix expected_fail by removing wrongly used QSignalSpy.

The test failed few times already because of a timeout. The test do not
measure the backend performance, which seems to be a bit low, so we can
wait 20 sec for a thumbnail.

Fix indentation.
Shared build fix.

The EnginioBackendConnection needs to be exported for autotests.