ADDED gneeric load(); moved around code

load() detects filetype and uses correct function via some inspection.
Perhaps better is to include some kind of module level registration
where one can add a function e.g. loadpxp and associate a default
filetype with it, which load() then uses automatically.
May want to reduce strictness of data type checking in future; added constant TYPE_CHECKING
Merge branch 'master' into feature-experiments

Grabbing improvements made to other modules so I can move forward with grabbing metadata from files and into Experiments.Pulling objects.
FIXED tabbing
UPDATED loadstr() et al for comment parsing

Improved abstraction in loadsettings so I could create a subfunction
parseSettings to parse the comment header of any file.

Updated loaddat() to return comments as a list of lines as first element
of 3-tuple (used to be 2-tuple) including colnames and data.

Updated loadstr() to use commentparser kwarg as function to turn comment
list and return it as a data structure. If not present, output is simply
the PullData type, else its a tuple with the parser output as first
tuple element.

Created commentsToSettings() that accepts iterator with items of the
form something=value and returns a dict; piggybacks on parseSettings()
used in loadsettings().

metadata,pull = loadstr('test1.str',commentparser=commentsToSettings)
UPDATED comments for metadata testing