Fix compiler abstract code

Previously the source filename of a module was sometimes a binary, this
change ensures it is always an erlang string.

Previously dialyzer did not know not to auto import bifs as it does not
read the compile options from a beam. This change uses an attribute in
the abstract code rather than a compile option so that dialyzer does not
auto import bifs.
Merge pull request #2199 from fishcakez/fix_abstract

Fix compiler abstract code