Add a `@typedoc` attribute to document types

Also a new `Kernel.Typespec.beam_typedocs` function to get the typedoc
information.
Remove unneeded empty lines in the typedoc tests.
Use `typedoc` attribute to store typedocs.

This requires a bit of a workaround because `typedoc` is also used to store the
doc of the next type to be defined. We store typedocs in the docs table when
types are defined and later filter them out and put them into `typedoc`.
Fix Stream.take/2 and Stream.take_while/2 for Stream.Lazy
Markdown rendering fix
adding tests for ipv6 addresses on URIs
handling IPv6 addresses on URIs

* very naïve and permissive regex to check for IPv6 addreses.
Merge pull request #1668 from elia/doc-fix

Markdown rendering fix
Merge pull request #1667 from betawaffle/lazy-throw-fix

Fix Stream.take/2 and Stream.take_while/2 for Stream.Lazy
Consider stream_lazy to always return the result, move nesting check to after reduce
more tests for IPv6
No longer trim by default when splitting

Further discussion here:

  https://groups.google.com/forum/#!topic/elixir-lang-core/66gb3J0bnUA
Return error on unsupported options in Regex.compile
parsing embedded IPv4 addresses
Merge pull request #1669 from brunoro/ipv6-uri

URI.parse supports IPv6 addresses
Merge pull request #1672 from meh/regex-compile

Return error on unsupported options in Regex.compile
Merge pull request #1671 from vanstee/string-split-trim-default

No longer trim by default when splitting
Support negative indicies in Enum.at/fetch/fetch!
Merge pull request #1675 from ericmj/enum-at-fetch-neg

Support negative indicies in Enum.at/fetch/fetch!
Only support iolists on IO