Made improvements to pretty printing

Hi, I found this PHP-Parser project and it appears quite useful. I started using the PHP Pretty Printer, and wrote a number of changes to this feature that I think are improvements. They are in this changeset that I am making available to you in case you want to pull the changes (or any part of them that you find useful).

Summary of the changes:
1. Wrote a fixTokens() function to fix the PHP Tokens so that any space found attached to a PHP end tag, ?>, is instead moved to the HTML following the end tag so it is preserved.
2. Saved information about heredoc and nowdoc tags in the parser so that the actual heredoc and nowdoc tags can be preserved on request.
3. Added a name callback function to transform constant names, for example, all instances of TRUE, FALSE, and NULL can be transformed to true, false, and null by using strtolower() as the callback.
4. Allowing strings that end in newlines to encode the newline because it looks better, for example, "\n" or "This is an example\n" will keep the \n sequence.
5. Rewrote the array printing function so that the arrays are nicely wrapped and easier to read.
6. Rewrote how the open brace and close brace are handled, so that the formatting of open brace and close brace can be changed systematically just by setting some configuration parameters. This is useful when following different coding styles that mandate different types of indentation and brace syntax.
7. Allowed blank lines before comments if a configuration parameter is set.
8. Changed the prettyPrintFile() to optionally include the closing tag if that is requested, since some standards require that.
9. Wrote a wrapLines() function that takes prettified code and wraps it after specified token types to within a given line length, since most formatting standards require that. I thought a separate function was easier to understand than modifying all of the existing functions.

I can give you some examples of before and after code and show you how much this is improved in terms of flexibility and appearance of output.

The rest of this message consists of a pretty printer script that I wrote which uses most of these new features.

```php
#!/usr/bin/php
<?php

/**
 * This is a pretty-printer using PHP Parser
 */
if ($argc != 2) {
   die("Usage: {$argv['0']} [filename]\n");
}
$fileName = $argv[1];
if (!file_exists($fileName)) {
   die("File {$fileName} not found\n");
}
require '/home/dsg/library/PHP-Parser/lib/bootstrap.php';
ini_set('xdebug.max_nesting_level', 2000);
$sourceCode = file_get_contents($fileName);
$parser = new PhpParser\Parser(new PhpParser\Lexer());
$prettyPrinter = new PhpParser\PrettyPrinter\Standard();

// Configure general formatting
$prettyPrinter->setIndentString('   ');
$prettyPrinter->setUseBlankBeforeComment(true);
$prettyPrinter->setUseArrayIndent(true);
$prettyPrinter->setPreserveHeredoc(true);
$prettyPrinter->setNameCallback('strtolower');

// Configure string length and line wrap
$prettyPrinter->setLineWrap(120);
$prettyPrinter->addWrapToken(',');
$prettyPrinter->addWrapToken('.');
$prettyPrinter->addWrapToken(T_BOOLEAN_AND);
$prettyPrinter->addWrapToken(T_BOOLEAN_OR);
$prettyPrinter->addWrapToken(T_LOGICAL_AND);
$prettyPrinter->addWrapToken(T_LOGICAL_OR);
$prettyPrinter->addWrapToken(T_LOGICAL_XOR);

// Configure line breaks before keywords
$prettyPrinter->setKeywordNewline('catch');
$prettyPrinter->setKeywordNewline('else');
$prettyPrinter->setKeywordNewline('elseif');
$prettyPrinter->setKeywordNewline('finally');
$prettyPrinter->setKeywordNewline('while');
try {

   // Parse
   $stmts = $parser->parse($sourceCode);

   // Pretty print
   $prettyCode = $prettyPrinter->prettyPrintFile($stmts, true);
   $wrappedCode = $prettyPrinter->wrapLines($prettyCode);
   file_put_contents($fileName, $wrappedCode);
   echo "Wrote {$fileName}\n";
}
catch (PhpParser\Error $e) {
   echo "Error parsing {$fileName}: ", $e->getMessage();
}
?>
```