Speed up the compilation process

* Do not parse source files twice while checking for relationship.
* Keep files relationships in a graph.
* The option 'keep_build_info' is introduced. When set to 'true'
  the graph will be kept in ebin/.rebar.build.info and will be
  used by further compiler calls. The default is 'false'.
Update .gitignore
Update Makefile
Update THANKS file
erlc: fix Dialyzer warning
erlc: refactor build info data

* use a record
* introduce versioning
* check data on restore
erlc: use consistent naming
erlc: use term_to_binary compression
erlc: use try...catch instead of case...catch...of
erlc: do not write build info file if the graph is unmodified
erlc: default enable keep_build_info
erlc: unconditionally keep build info
erlc: store info file in base_dir

* make it a universal info file
* store it as <base_dir>/.rebarinfo
Reuse rebar_utils:base_dir/1 in rebar_deps and rebar_xref
Introduce <base_dir>/.rebar/ and store erlc build info there
erlc: add TODO regarding 'catch file:close(Fd)'
erlc: fix a bug in handling of files to compile first

If a file that is depended upon itself depends on other files, make sure
those are compiled first. While at it, rename variables for correctness.

Reported-by: David Robakowski
erlc: prepare clean FirstFiles

Make sure that FirstFiles has no dupes and preserves the proper order.
erlc: extend dot_erl/3 comment
erlc: relocate helper function