Keep mInternalObjects in sync for CardArrayAdapter so that undo always works as expected.

If setEnableUndo is set to true, CardArrayAdapter tracks the Cards in the underlying array in a HashMap, mInternalObjects. If ArrayAdapter methods add, addAll, or insert are used to manipulate the CardArrayAdapter, mInternalObjects was not updated. So, the undo functionality would fail for any Cards added to the adapter in this way. Fixed this by tracking any changes to the adapter and reflecting this in mInternalObjects, keeping the HashMap in sync.

To accomplish this, I added the following:

- Override the add, addAll, clear and insert methods of ArrayAdapter in CardArrayAdapter so that if mUndoEnable is true, mInternalObjects will be updated as well.
- Added a listener to UndoBarController so that the caller can have a callback when the undo bar is hidden, with a boolean parameter to track if the undo was triggerd or not. Using this, CardArrayAdapter will be notified when the user's opportunity to undo an item has completed. If the user will not undo the card swipe, it is removed from mInternalObjects, to prevent memory leak.

Thanks for creating this library! Let me know if you have comments or questions.