clarifying some inline docs
BREAKING CHANGE: `fetch_url` now returns a tuple of `(html, encoding)
now tracking in ParsedResult: encoding
ParsedResult.metadata['_internal']['encoding'] = resp.encoding.lower() if resp.encoding else None
`.parse` now accepts `html_encoding`
refactored url fetching to use context managers
refactored url fetching to only insert our hooks when needed
adjusted test harness to close socket connections