Implement new recordable command: ModelEventCommand

Background
==========
This is meant to implement a new **RecordableCommand** to record clicking of **+** or **-** buttons on **List** node. The new command is generalized as **ModelEventCommand**. It is primarily meant to close the outstanding task:

[MAGN-402 Add test for CL](http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-402)

The defect fix that is verified with this pull request is:

[MAGN-338 Crash On undoing removed index from list node](http://adsk-oss.myjetbrains.com/youtrack/issue/MAGN-338)

Testing scenarios
=================
The following node types are involved with this commit, they should be tested:

* Perform All
* Apply Function
* Concat Strings
* List
* Combine
* Python Script With Variable Number of Inputs
* Get Parameters

Unit testing
============
* All existing test cases are passing
* The following test cases have been added:
 * TestModelEventCommandAdd
 * TestModelEventCommandAddRemove
 * TestModelEventCommandUndo
 * TestModelEventCommandUndoRedo