fix forking bugs

when forking off a pipeline, ioPipeline wasn't waiting for all children to finish - leaving zombies about
stop using the threaded RTS, as it causes random hangs on Linux
implemented completions for ~ paths - issue #22
fixed bug: wasn't setting flags on the command in the shell state
refactor all script execution into Plush.Run.Script
removed barely used utilities out of Run.hs

finally got to rename the horribly named function 'shellExec' to the more sensible 'execute'
added login concept to Main

added missing function to return raw argv[0]
added --login flag
added test for "-" at start of argv[0] to imply login
start-up scripts
add check for real and effective uid/gid match before running ENV script
default profile and env scripts

Create the ~/.plush directory, and profile and env scripts within it on login, if absent
added writeAllFile utility, and instances of PosixInStr and PosixOutStr for strict ByteString
bonus: use PS1 on command line
cleanup prior to if/while/until

the parsed types were named after fragments of the grammar - now they are named after the total constructs they represent
the IfConditional's structure wasn't the right shape to represent a full if-then-elif-then-else construct.
parsing if, while, & until

fixed parse of term, refactoring with list
fixed parse of compound_list which missed optional leading newline_list
factored out do_group, which is a non-terminal in the grammar
improved pretty printing of for, if, while, and until constructs
execution of if and while and until
refactor to pass command name separately from executable path (as found on PATH) to execProcess so that we may, one day, set argv[0] correctly
properly pass the command name as argv[0] when running external commands
Fixes issue 8 - tabs are actually part of <blank>

Note: We don't have a way for doctest to inject tab characters so I can't write tests for this.
parameter expansions with modifiers

new parameter modifier types
parsing and text conversion for parameter modifiers
expansion for some modifiers (all but %, %%, #, and ##)
factor out pathnameGlob into Pattern.hs
pattern matching in parameter substitution

doesn't handle literals in the pattern of the form  ${var#this'*'that}
proper handling of quoted pattern parts
handling of quoted parts in pathname (glob) expansion