comment out #NoEnv, this is AHkv2 default

I didn't remove this line entirely, just in case there is some variable
that will conflict. But from a brief glance it should be fine.
`in` keyword is reserved in AHKv2, so use normal comparison instead
change optional parameter with default value to variadic parameter

AHKv2 requires that the default values for option parameters
be specified using `:=` instead of `=`
AHKv1:
func(required_param, optional_param = "default_val")
AHKv2:
func(required_param, optional_param := "default_val")

One way to make this backward compatiable for both is to use
variadic parameters so thats what I did.
v2 syntax change, need to use %fn%() which works in v1 and v2

from v2-changes:
The expressions funcName[""]() and funcName.() no longer call a
function by name. Omitting the method name as in .() now causes
a load-time error message. %funcName%() should be used instead.
v2 removes WinSet, so just call InvalidateRect() directly
another syntax change, required parameters must be passed

from v2-changes:
new Obj() now fails to create the object if the __New meta-method is
defined and it could not be called (e.g. because it requires parameters
and none were supplied).
obj.MaxIndex() is removed in v2, replaced by obj.Length()
v2 uses .InsertAt() instead of .Insert()
change Loop Parse to use StrSplit() and for-loop

In v2, Loop Parse requires a literal string instead of an InputVar as
a parameter. So in v2 it would have to be written:
   Loop, Parse, %Categories%, .
instead of this v1 form:
   Loop, Parse, Categories, .

So, instead we will just StrSplit the Categories variable and use
a for-loop to iterate over each loopfield.
change position when searching from the right using InStr()

from v2-changes:
A negative StartingPos for InStr, SubStr, RegExMatch and RegExReplace
is interpreted as a position from the end, starting at 1. Position -1
is the right-most character (in v1 this was position 0), and position
0 is invalid.
Merge branch 'v2-compatible'

Conflict:
   Window.ahk