Merge tag '1.4.1' into develop

1.4.1
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Restore pad to new location at a given revision

This script gives an admin with shell access the ability to restore a
pad at a given revision by essentially rebuilding it at a new location
with data associated with the original pad.  The upsides to creating a
new pad vs. changing the original are: 1) avoiding service disruptions
(no deletes, no moving targets - builds from previous revision); and 2)
preservation of data (no deletes, no overwriting of the source pad).
The most obvious downside is the pad has a new ID which could require
folks to update their links, bookmarks, etc. to point at the new
location.
Merge branch 'develop' of github.com:ether/etherpad-lite into develop
Simplify the rebuild process

The majority of the information needed to build the new pad can be
communicated by simply cloning the rev using a db.set().
use cheerio instead of jsdom
so yeah, prolly can do this anyway?
mheh no browser requirement at all
really recreate socketio-client in expressCreateServer, fixes #2342

When using plugins, the express server gets restarted. When we do that,
the socketio-server should also get restarted. It doesn't. That means
that all the events in SocketIORouter.js are bound twice, which causes
chaos all over etherpad.

This changes our socketio.js so it fully recreates the io-instance when
we restart the server.

introduced in 95e7b0f15609fc850b71717a672abd02237a0f33, but catching
that would have been hard.
Merge pull request #2342 from ether/fix-2320-crash

fix #2320
mocha
multiline
remove jsdom dep
basic test runner
Merge branch 'develop' of github.com:ether/etherpad-lite into jsdom-go-away
mocha version
make internal note of which endpoints need testing