implement Mutually Exclusive Groups
passes lint, test/testgroup.js and runs test/group.coffee
group.coffee tests group and exclusive groups a bit more than testgroup.js
but isn't structured as a test.
minor cleanup
generalize testgroup error matching
lint fix
Correct handling of groups that are passed from a parent parser to child.

As in ArgumentParser, use actionHash(action) as a groupMap key
in ActionContainer._addContainerActions
Correct Action.getName() so it tests .dest against null, not undefined
(its default value is null)
test/childgroups.js tests this case. Setup case is a bit contrived.
remove nonstandard example and test files
storeConst and appendConst give errors if `constant` is not defined; test in constant.js
Merge pull request #32 from hpaulj/actionconst

Improved options check for storeConst & appendConst, closes #31
Merge pull request #30 from hpaulj/exclusive

Exclusive
history update
Fixed lint warnings
forsed error on unused vars in jshint
0.1.10 released
This argparse failed the test_argparse.py TestOptionLike class
Args like '-x -2.5 a' are supposed to fail.
The problem is that Python match() starts the match at the start of a string.
Javascript match can match anywhere in the string.
Correction in argument_parser.js, matchArguments() and matchArgumentsPartial()
is to add '^' to the pattern.

TestOptionLike.js tests the change in matchArguments().  I don't know of a test
for the matchArgumentsPartial() change.
This argparse fails test_argparse.py TestOptionalsActionAppendConstWithDefault class.
This test has two actions with the same 'dest'.  The Python test expects
the defaultValue of the 1st action to apply, but the JS code uses the 2nd's
defaultValue (or lack there of).

The correction is to change how ArgumentParser.parseKnownArgs() checks the
namespace for a value.  A namespace is object-like, so indexOf is wrong.
Change this to _.has().  The indexOf version, besides applying to the wrong
kind of object, always returns true (the key is never found).

Namespace handling could be cleaned up.  Sometimes it is accessed with
object methods, sometimes with its own set and isset.  Also its handling
of null differs from the Python (more on this in another pull).
JS argparse fails the test_argparse.py test for
TestOptionalsNargsZeroOrMore(ParserTestCase
Tests specifying an args for an Optional that accepts zero or more

In this case ['-y'] with nargs='*' and defaultValue= 'spam', should be
using that default.  (Positionals with '*' on the other hand don't)

Correction: test for optionStrings.length in ArgumentParser._getValues()
Action.isPositional() does the same thing.
argparse.js fails 2 help related tests in test_argparse.py

TestParserDefault42 sets a parser argumentDefault
The error is that the namespace includes {help: 42, version: 42}
Correction: add defaultValue: $$.SUPPRESS when defining --help and --version
in ArgumentParser().

TestOptionalsAlternatePrefixCharsAddedHelp sets prefixChars.
If prefixChars does not include '-', setting ['-h','--help'] gives an error.
Correction: set a defaultPrefix that is either '-' or the first prefixChar,
and use this instead of '-h'
In test_argparse.py TestPositionalsActionAppend
with 2 positional args, one that takes 1, the other 2,
parseArgs with 'a b c' produces spam: ['a','b','c'], but python expects
spam: ['a', ['b','c']].
This is because append.js uses 'concat', while python uses 'append'.

Correction: change action/append.js set() to use push()
TestPositionalsNargsOptional adapted from test_argparse.py gives an error
'AssertionError: {} deepEqual {"foo":null}'
A dozen other classes in the py test file give similar errors.
The problem is that the JS Namespace class treads null differently than
the python None.

Python gives every 'dest' at least a None value.
The JS Namespace tries to treat a null value as the same as undefined.
However, because sometimes values are set with Namespace.set(), and other
times with ordinary object assignment, sometimes a null value appears in
a namespace.

These tests do pass if a modified deepEqual is used, one that ignores
differences between {bar: null} and {}

Python has a special Namespace class because its base Object class does
not directly accept attributes.  It also defines a nice display method.
The resulting class is essentially the same as the Javascript object.

To better match the Python:
- change namespace.isset() to use _.has() instead of !! (!!null is false)
- remove the null test in namespace.set()
- the _.extend() alternative is not used.
- namespace.get() is not used
Merge pull request #33 from hpaulj/testoptionlike

This argparse failed the test_argparse.py TestOptionLike class
Merge pull request #34 from hpaulj/appendConstDefault

Use of _.indexOf to search a Namespace is wrong