Update CONTRIBUTING.md
Create vendor/gems if it doesn't exist

I was having an issue when migrating this code over to Liftoff where if
vendor/gems didn't exist, the entire vendorizing script didn't run. By
testing that the directory exists and creating it if not, these errors
stop happening.
Extract an InteractiveRunner from CLI

This splits the Gitsh::CLI class in two: Gitsh::CLI retains responsibility
for argument parsing, while Gitsh::InteractiveRunner takes on all
responsibility for running an interactive session.

This is partly just to keep thing clean and easy to change, and partly to
pave the way for an eventual non-interactive mode.
Parse empty string arguments correctly.

When the parser encountered an empty string (e.g. `""`) it was matching the
`soft_string` or `hard_string` rule, but didn't include any named matches
(i.e. any `literal` characters) so it returned the whole matched string
instead.

After experimenting with various ways of matching the opening and closing
quotes, it ended up being a smaller and more understandable change to just
add a rule to explicitly match empty strings.

Fixes #139
Support commented lines.

Any line beginning with a # will be treated as a comment and ignored. A #
later in the line doesn't (yet) indicate a comment.
Prevent blank lines from causing a parse error.

This was an issue as most commands currently can be preceded by
spaces, but there was no rule to support spaces alone.

The behaviour of a blank line is now identical to that of an empty
line; by default the `git status` command, overridden by
gitsh.defaultCommand
Wrap the binary in C.

This will allow us to use gitsh as a sh-bang line, and hopefully to set the
process name correctly. The C code has deliberately been kept as simple as
possible; the intention is to keep the majority of the functionality in
Ruby.
Started to implement parsing of relative shell commands

Made a basic feature test to help drive development
Then wrote a unit test which is wip
and added specific rules for parsing shell commands
The issue now is how to remove new lines from my shell commands
and how do I test executing a relative shell command?
updated shell_identifier to use forward_slash rule
removed redundant comma
Correct relative shell command parsing

This also makes some changes to identifier parsing. It replaces the A-z
pattern match with a more specific one that does implicitly match characters
in between Z and a in the ASCII table. Also adds some necessary explicit
matches for underscores and such. Improves variable and identifier parsing
specs.