Move RecordableCommands into DynamoModel

Full description of this PR is here:
https://github.com/DynamoDS/Dynamo/issues/2497
This is very interesting, @marimano! In fact I have learnt a new trick here, so good stuff! :)

However, being not a big fan of using exception this way, I envisioned it to be done this way (I'm not sure if @pboyer has a different opinion):

```cs
void OnModelCommandCompleted(DynamoModel.RecordableCommand command)
{
    switch(command.GetType().Name)
    {
        case "OpenFileCommand":
            this.AddToRecentFiles(command.XmlFilePath);
            this.VisualizationManager.UnPause();
            break;
            
        default:
            // Just in case we rename any command in future.
            throw new InvalidOperation("Unhandled command!");
    }
}
```