Fixing 1 of the 4 BufferedReader test failures in bug 2224903.

This CL includes the following functional changes:
 - changing read to not clear the mark upon reading EOF
 - changing read(char[], int, int) to use the 'read
   directly from the source stream' shortcut when the
   mark has exceeded its limit. Previously we took the
   shortcut only when the mark was unset.

And these nonfunctional changes
 - rewrote read(char[], int, int) dramatically. The new
   revision contains only one call to 'System.arrayCopy'
   and the related bookkeeping. Previously there was one call
   before the loop, and another call in the loop.
 - renamed markpos to mark
 - renamed marklimit to markLimit
 - renamed count to end (it isn't a count, it's a position)
 - simplifying conditions that used >= when > was impossible
 - reducing the number of field reads where convenient
3 files changed