Parser changes needed to support eventual Suffix function call syntax.

This does not actually implement the suffix function calls yet, but it
modifies the parser as needed to make the following into a valid
syntax:
   VARIABLE:FIRSTSUFFIX:SECONDSUFFIX(arg,arg,arg).

(Right now if you actually try doing this, it will give runtime exceptions
because the virtual machine doesn't implement the delegate method calls
in the kRISC opcodes yet).

In fixing this, I **think** I may finally have slain the beast of messy
syntax that was also making some mixtures of suffixes, indeces, and
function calls not be mixable.  (I *think*).  The same change may also
now start allowing complex things like this:

   SET VARIABLE[10]:SUFFIX(arg):MORESUFFIX  to 10.

TO be parsed correctly.  The compiler won't actually build the right code
to execute it properly yet, but that's now potentially possible because at
least the parser isn't blocking the way like it had been.

I finally found the place where the parse rules were causing the LL(1)
parser to hit ambiguity, and it was in the attempt to support more complex
expressions using the deprecated "#" syntax for loop indeces.  There's a
*reason* languages use an open/close syntax like [..] or (..) for array
indeces.  Parsing multidimensional array indeces without that rigid help
makes simple parsers barf.  When I reduced the "#" usage to only allowing
raw numbers or raw variable names again, the ambiguity went away and I could
fix the parse tree.  This may *slightly* break backward compatibility, if
anyone was trying to use the old syntax to do very complex things, but I
consider that acceptable, as that syntax is holding us back from fixing
bigger problems.
Further fixes to parsing for better parsing of mixed suffix/array/function.
Preliminary successes with some method calls!  Need more testing.
This is being checked in only because I did a lot of code and feel
nervous about not having it committed.  I know I haven't tested it
completely yet and expect to probably have to tack on another commit
after this one to deal with whatever I find in that testing.
It now seems to have everything working except for this complex
syntax construct:

set foo to list().
foo:add("aa").
foo:add("bb").
foo:add("cc").
foo:add("dd").
foo:add("ee").

print foo:sublist(2,2).     // <-- works
print foo:sublist(2,2)[0].  // <-- syntax doesn't reconize this as valid yet.

But it's still a lot better than what exists now, and it has a form of
methods working (built-in methods implmemented by having GetSuffix return
a delegate, but not user-made methods yet, as those are for far off in the
future.)
Merge remote-tracking branch 'Dunbaratu/parse-allow-suffix-function' into suffix_redux

Conflicts:
	src/kOS/Suffixed/RgbaColor.cs
Implements skeleton structure of #255.  What's there works, and is
designed to be able to move a few more exceptions at a time into the
new system incrementally until eventually they all use the new system.
Now that this is implemented this far, I can switch back to working on
other stuff I was blocked on.  I just dind't want to have to make yet
ANOTHER bit of code that throws generic exceptions.  I wanted this system
to exist so I could make new exceptions using it.
More exceptions for issue #254.

There seems to be a bug where line number information is missing
and this causes the compiler to claim an error is internal when
it's really user-caused.  Not sure where that is, but I'm not entirely
convinced I caused it because I remember getting it before this change.
Fixing it should be handled as a separate issue after this is merged in.
Merge remote-tracking branch 'Dunbaratu/parse-allow-suffix-function' into suffix_redux
Merge remote-tracking branch 'Dunbaratu/exception-infrastructure' into suffix_redux

Conflicts:
	src/kOS.Safe/Compilation/KS/Compiler.cs
	src/kOS/Function/Misc.cs
	src/kOS/Logger.cs
changed IKOSException to an abstact base class