Add pretty printing library to Elixir stdlib
Tests for wadler; Guards for primitive types.
Merged (Fri May 10 06:22:13 EEST 2013)
Put pretty printing library into core
Binary.Inspect now uses pretty printing library
using Lindig's strict pretty printer

* Implemented Wadler document algebra with explicit groups, meaning
  that a break should be rendered to a linebreak or a space as
  specified by a mode: `Flat` or `Break`.
* This algorithm reduces the search space for document layouts, as
  no `best` function is used to search lazily over layouts with a
  flat or newline breaks.
adapted IO.inspect calls to Lindig interface

* group1 and line functions were changed
* relying on `surround` helper
* using a default identation of 2, this should be an option?
Optimizing string concatenation calls on wadler.ex

* Modified render method to render sdoc records to a string list
  followed by a Enum.join call.
Merge remote-tracking branch 'upstream/master' into wadler-lindig

Conflicts:
	lib/elixir/lib/binary/inspect.ex
	lib/elixir/lib/kernel.ex
using iolist_to_binary over Enum.join on wadler.ex

* iolist_to_binary assumed to have better performance.
adapted wadler.ex unit tests to current interface
adjusting nesting tests and behaviour on wadler.ex

* surround/3 function aware that nesting only adds spaces after a
  linebreak
* nesting tests should force Break format mode, as Lindig pretty
  printer defaults to Flat printing for small strings.
stripped spaces from record pretty printing

* brackets are not followed/preceded by spaces when inspecting.
adjusting failing tests relying on inspection

* some test cases rely on result from the inspection functions.
  Those were adjusted based on the current result of the inspect
  function, but a more clever method of comparing the result may
  be needed if changes on the tests recur.
moving over to :lists.duplicate

* List.duplicate makes exponentially more :lists.duplicate/3 calls
  than :lists.duplicate/2.
* it also yields better slightly results than String.duplicate.
fixing inspect pretty: false option

* inspect pretty: false calls Wadler.format with :infinity
  as line width.
* Wadler.fits? with w=:infinity always returns true.
* Wadler.format with w=:infinity will only use Flat mode,
  not adding any line breaks.
Mix not using pretty printing

* Added pretty: false option to all inspect calls.
mix archive version # & -o flag for #1284
Remove variables defined in `match?` from scope

At @josevalim's suggestion, we loop over the ast given to the macro and
disable scope of any new variables defined, which effectively stops
variables from leaking into the outside scope.

Fixes #1304
Merge pull request #1311 from vanstee/contain-match-scope

Don't leak matched variables when calling `match?`