Psycholinguistics Dashboard iteration 5 - Connect games with dashboard

* Implemented recursive merge of objects, and collections. This means we can merge datum, corpora, datalists, sessions, users, basically anything in the system which extends FieldDBObject or Collection. The merge can be done safely either silently and/or without prompts to the user with a full audit trail in the object of warnings if any. @hisakonog @gretchenmcc @Kedersha  @jrwdunham  This means we can do   
 * a diff on two datum/corpora/sessions/datalists if one or both users were offline for #124 #110  #818  #793  and 
 * we can also merge corpora #963 #728
* Added a few more functions to Database/Corpus (get, set, delete) which can open a document, or save a document or delete a document (this flags it as trashed because delete is not permitted from client apps) .
* Speaker extends UserMask and inherits the name property (which is constructed of Firstname Lastname if defined, else the username)

To see how to use merge, see the test suite. To make it simple its copied here:
```javascript
// Merge a second object into yourself
    var imTheSameObjectAsABaseObject = aBaseObject.merge("self", atriviallyDifferentObject, "overwrite");
// Create a third object by merging two objects, if there is a conflict, overwrite the value from the second object in the first object
    var aMergedObject = aBaseObject.merge(aBaseObject, atriviallyDifferentObject, "overwrite");
// Create a third object by merging two objects, if there is a conflict, ask the user what they want to do
    var aMergedObjectWhichWasBuiltByAskingUserForEachDifficultMerge = aBaseObject.merge(aBaseObject, atriviallyDifferentObject);
// An infinite loop! (the merge is called recursively)
    aBaseObject.imInsideMe = aBaseObject;
    var iWillNeverFinishMergingAndYourBrowserWillCrash = aBaseObject.merge(aBaseObject, atriviallyDifferentObject, "overwrite");
```