title: Minimal python example using BufferedReader acting strangely
body: <p>See below the Minimal python example using io.BufferedReader which is acting very strangely.</p>
  
  <p>Results are not consistent between the 3 calls.  2 work, and the last one, the most important one does not.  I have been looking at this too long and I don't see the problem.  Maybe I am doing something wrong I am missing.  Please take a look.  I am using Python 2.7.15+ on Ubuntu 18.04.3 LTS.</p>
  
  <p>Note: Results are in the ### comment below the lines which produce output.</p>
  
  <pre><code>from io import BytesIO, StringIO, BufferedReader, DEFAULT_BUFFER_SIZE
  
  
  class MDReader(BufferedReader):
  
    def __new__(cls, thingtoread, buffer_size=DEFAULT_BUFFER_SIZE):
      iothing = BytesIO(thingtoread) \
          if isinstance(thingtoread, str) \
          else StringIO(thingtoread) \
          if isinstance(thingtoread, unicode) \
          else thingtoread
      print iothing
      return iothing and BufferedReader.__new__(cls, iothing, buffer_size)
  
  text = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  
  mdr0 = BufferedReader.__new__(MDReader, BytesIO(text), DEFAULT_BUFFER_SIZE)
  ### &lt;_io.BytesIO object at 0x7f348d06bbf0&gt;
  
  mdr1 = MDReader(BytesIO(text), DEFAULT_BUFFER_SIZE)
  ### &lt;_io.BytesIO object at 0x7f348d06ba70&gt;
  
  mdr2 = MDReader(text, DEFAULT_BUFFER_SIZE)
  ### Traceback (most recent call last):
  ###   File "&lt;stdin&gt;", line 1, in &lt;module&gt;
  ###   File "./foo.py", line 19, in &lt;module&gt;
  ###     mdr2 = MDReader(text, DEFAULT_BUFFER_SIZE)
  ### AttributeError: 'str' object has no attribute 'readable'
  </code></pre>