Moved EffectBase.AlreadyPlayedForCurrentBehavior property out of EffectBase and added a HastSet into Pony to track this instead.
Altered FollowTargetDialog so it could be accessed by the new editor.
Made Reference.AutoStarted an instance member of Main, since it was not used outside that class.
Tweaked Referential.GetIssue/CheckReference for speed.
Added IOExtensions with methods on Stream and BinaryReader than throw when trying to read blocks of data and the data returned is not the full length requested (the standard methods return the length of the data actually read, but it is usually an error if it was not all available). Used this methods in GifImage and ImageSize.

Changed GifDecoder to reuse the block array buffer, rather than replacing it all the time (to reduce allocations).
Changed AnimationLoopBase to iterate over internal LinkedList rather than ReadOnlyCollection wrapper to remove indirection - and avoid boxing required by having to go through the interface definition.
Minor tweak to GifDecoder.

Fixed spelling error in IOExtensions.
Moved some instance variables in GifDecoder to local variables in the ReadImageData method as they were not used outside that scope.
Corrected some typos. Fixed casing conventions in OperatingSystemInfo.
Added issue check for circular behavior chains.
EffectImageViewer will reset animation to the beginning, to keep timing in sync.

It also will now paint the effect image on its own, if a behavior image has not been set.
Changed several item editors to use editable combobox lists, and prevent the user of the quote character in some fields.

Also changed some event handling regarding how some editors synced their fields and source text.
Changed BehaviorEditor to not require a separate PonyCollection, it will instead use the collection available in the PonyBase object.
More cleanup of the FollowTargetDialog class.
Added ItemsViewerBase - for the item collections in the new editor. A simple initial BehaviorsViewer has been implemented.

Added several new buttons and context menus to the new editor. These will allow access to the preview, and the new items lists.
Changed PonyPreview to refresh bounds when the area has changed, rather than just on every update. It will also set DisplayBounds on the WinFormSpriteInterface, which gives a decent impression that the interface is actually part of the editor since it is nicely clipped at the edges.
Changed StringCollectionParser to not SkipParse when an earlier failure occurred. This may create spurious errors, but ensures if a single fatal problem occurs, that later valid items are still parsed. This helps the editor windows which may otherwise update with fallback values when a fatal error occurs, and then push the fallback values to the ini string if the problem is fixed via the UI - thus the wiping the original values.
Changed tags to use CaseInsensitiveString in all places.

Add constant for "Random Pony" directory which requires special handling.
PonyBase will now save comments and invalid lines when loading from file, which are saved when writing to disk (previously, comments would be load just before saving, and invalid lines got dropped). Unrecognized tags are no longer dropped on save.
PonyBase.ChangeDirectory will rewrite image paths to correct them. PonyCollection.ChangePonyDirectory will no longer fix target names (only initiator names) to keep consistant breakage when renaming things.
Tidied up FollowTargetDialog more, and corrected some validation on hitting OK to ensure fields were filled in.
Added dialog to new editor to allow changing of pony directory, display name & tags. Added RefreshReferentialIssues method to ItemEditorBase to allow open tabs to be refreshed after that dialog closes.
Changed new editor to select the next leftmost tab when closing a tab for improved usability, rather than the default which is the first tab.