Save-upload functionality for NWK

It should be implemented in the different from browser version way. Flood in NWK should have the same kind of behavior that is in DynamoSandbox:
1) Open - Open a file from the local file system. Dynamo will need to know about the location on disk in order to support 2. 
2) Save - Save the current workspace to the local file system - this is only relevant in node-webkit mode. If the file already has a filename associated with the local file system, overwrite that file.
3) Save As.. - Prompt the user to provide a new filename to be saved to the local file system.

This PR contains changes from https://github.com/Benglin/Dynamo/pull/152. So https://github.com/Benglin/Dynamo/pull/152 should be merged first
Having this ```FileUploader.SendWorkspacePath``` property that is being used a long time later is unusual (this property is being set in ```FileUploader.ProcessFileData``` and used by code that does not call ```ProcessFileData```). Here is what I'm suggesting (so we can tell ```NodesDataCreated``` whether or not the path should be responded to client):

```csharp
class FileUploader
{
    enum ProcessResult
    {
        Failed,
        Succeeded,
        RespondWithPath
    }

    internal ProcessResult ProcessFileData(...)
    {
        try
        {
            ProcessResult result = ProcessResult.Succeeded;
            if (!string.IsNullOrEmpty(uploadFileMessage.Path))
            {
                // ...
                result = ProcessResult.RespondWithPath;
            }
            else
            {
                result = ProcessResult.Succeeded;
            }
            
            connectorsToCreate.Clear();
            return result;
        }
        catch
        {
            return ProcessResult.Failed;
        }
    }
]

public class MessageHandler
{
    private void UploadFile(...)
    {
        var result = uploader.ProcessFileData(message, dynamo);
        if (result != ProcessResult.Failed)
        {
            bool respondWithPath = (result == ProcessResult.RespondWithPath);
            NodesDataCreated(sessionId, respondWithPath);
        }
        else
        {
            // Bla bla bla...
        }
    }
}
```