Read lines from the file (handling line continuations and comments)
and parse the lines using the
Reader. Raises
Invalid_Configuration
with a descriptive message if a parse error occurs.
The Reader may rely on the particular sequence of parsing operations
use by Read: for each line, it first calls Parse_Key, then
Parse_Operator, and finally New_Key. The value of a key is the
rest of the line beyond the operator, with leading and trailing white
space trimmed.
This routine is smart enough to handle recursive calls, where the
Reader's New_Key operation calls Read_From_File again. If
a recursive inclusion of an already included file is detected,
Invalid_Configuration is raised.
Warning: this recursion detection can be subverted if an original
Reader's New_Key operation calls Read_From_File passing another
Reader!