mark up source files with encoding, as needed
eunit: Eliminate use of the package syntax
Wrap eunit macros into begin ... end blocks

This makes typos such as missing commas between two assertions
(e.g. ?assert(true) ?assert(true)) syntax errors instead of silently
compiling and failing with a badfun error at runtime.

This won't break any existing code as parenthesed expressions and blocks
have the same precedence and none of these macros can be used as patterns.
Fix I/O-protocol error handling in eunit

A io_request in eunit reuturns wrong value when it receive getopts or
get_geometry request.
Do not attempt to detect lists of printable characters in Data

This is to avoid outputting something like "\"%\f" instead of [34,37,12] in the XML.
Deprecate pre-defined built-in types

The types array(), dict(), digraph(), gb_set(), gb_tree(), queue(),
set(), and tid() have been deprecated. They will be removed in OTP 18.0.

Instead the types array:array(), dict:dict(), digraph:graph(),
gb_set:set(), gb_tree:tree(), queue:queue(), sets:set(), and ets:tid()
can be used. (Note: it has always been necessary to use ets:tid().)

It is allowed in OTP 17.0 to locally re-define the types array(), dict(),
and so on.

New types array:array/1, dict:dict/2, gb_sets:set/1, gb_trees:tree/2,
queue:queue/1, and sets:set/1 have been added.
Refactor function in eunit using is_function/2

is_function/2 looks present since at least OTP R13B03, so the change
shall not undermine running eunit on older versions of Erlang.

This commit is only refactoring - it contains no functional changes.
eliminate pointless diffs between this code and the version in OTP
clean up a comment