Add ability to list files in a variable
Merge branch 'develop' of github.com:ElasticRaven/KOS
Merge remote-tracking branch 'origin/develop'
fixed project
Resolves #186 and #210

This is a rather large edit because it required a lot of work to track back
to the source line where an opcode came from.  See the comments for
issue #186 for the majority of the explanation.

Issue #210 was solved along with this because the stack trace work I was
doing is what discovered problem #210.
I had the stack trace coming out in backward order.  Fixed it.
With the swapping of the order of the trace, I forgot I also had to
change which of the contiguous same-line calls in the call stack
is the one being printed (the first, not the last):
Added interactive interpreter stack trace ability, and also changed the format of showing filenames and volumes.
(was vol/filename - is now "filename on vol".)
Wo-hoo.  Got it to print the context of flight control updater now too.
Resolves #104 - upper limit on trigger duration.
Resolves #207 Mod compatibility (Module Manager(2.2.0))

This fixes null object references which happen when you use Module
Manager to add the kOSProcessor module to command parts which are the
root part of the ship.  These errors will happen every time you Revert,
load either from Persistent or Quicksave, change ships, or change
scenes.

In FlightControlManager.cs:
AddTo is rearranged so that it only tries to work when both
shared.Vessel and shared.Vessel.rootPart are both not null.
UnBind won't try to get and unbind the flightControls entry if
currentVessel.rootPart is null.
Dispose won't try to UnBind or Remove the flight control when
currentVessel or currentVessel.rootPart are null.
Resolves #158 (with a different approach).

The design decision was made that it is better to have multiple single terminal
windows than have one tabbed window.  This code implements this.  It was not
as simple as it looks because Unity GUI is a messy and not well documented
if you try to do anything slightly different from the default.

The basic design is like this:

Previously:

  There was exactly one TermWindow object, and it was created during
  initialization of kOS mod.  As the terminal is opened on different
  kOS CPU's, it gets re-attached to whatever instance of SharedObjects
  goes with that CPU.

Now:

  There is exactly one TermWindow object PER kOSProcessor module, and it
  gets created during the initialization of hat kOSProcessor module, and
  the attachment to the SharedObjects happens then.

  Opening and closing it merely opens and closes it, rather than
  re-attaching it to a different instance of SharedObjects.

What made most of the code messy was dealing with the Unity logic of
processing stacked windows, and preventing clicks from passing through
from one window to another.  Once there was more than one TermWindow,
we have to deal with the issue of what to do if TermWindows partially
overlap each other.  The old code from before allowed clicks to pass through
to all the windows stacked on top of each other.  Most of the code changes
here are designed to get around that problem, rather than being directly
related to just having multple terminals.

Why do it?
----------

A number of future feature ideas, including wanting to use the new KSP 0.24's
toolbar menu system, as well as possibly implementing resized terminals, first
required simply *having* the ability to have multiple terminals, which we
didn't have before.  Solving that was a pre-requisite to dealing with the
other features.

How to use it?
--------------
When you rightclick a kOS part, and pick "toggle terminal", you get the
the terminal window for THAT part appearing.  You can rightclick other
kOS parts to get the terminal for them to appear.  The terminals can be
slid around and moved to wherever you like, and closed individually.
There was a bug with the Close button on the terminal only
working part of the time, which I traced to the fact that
the PNG image file for the terminal hardcoded the Close
button into the terminal image, which covered up
the actual close button that the GUI was trying to make.
Before this hadn't caused a problem because we were allowing
clicks to pass through all layers.  But when I made clicks stop
at the first object they hit, that meant the terminal image
of a fake "close" button was blocking the clicks from reaching
the actual close button underneath.

I removed the close button from the terminal image,
so it always gets created dynamically by the GUI window
paint routine instead, and altered the buttons of the
popup editor to always use the Unity GUI.Button type
instead of trying to roll-my-own button out of a box.
this is much cleaner with the skinning and the window
stacking.
Cleanup - some of what I removed from the previous commit
was merely commented out rather than actually removed entirely.
Now it's removed completely.
Resolves #219.  Changed the way it counts "am I at the end" to handle
the square-bracket list index style (where there's a "]" token node after
the last index, unlike with the "#" syntax where the index is the last
node there is.).
Bigger code fragment dump on runtime errors.

I was noticing that each and every time I was trying to use the
code fragment dump that comes from runtime errors, it was never
long enough to tell me anything and I always had to increase this number.
Then I'd set it back to 4 again before checking in because it was never
part of the actual change the pull request was for.

Finally I got tired of this and made it a seperate pull request to dump
more of the program opcodes around the error.  Clearly in practice, 4 was
never enough to diagnose anything.
Resolves #220: RENAME on archive deletes file.

Adds a RenameFile override to Archive.cs so that it uses standard file
I/O to rename the file in the archive directory.  The new file will be
all lower case, which currently can't be helped.
review cleanup
Merge remote-tracking branch 'Dunbaratu/detect-too-long-triggers' into develop
review cleanup