Revert "Fix `std.range.takeExactly` trait to reject slices without length."

This reverts commit 6a0b6c4deebe48d0e2650598bdf58ffa93cb66b5.
Adjustments to take and takeExactly.

takeExactly now returns the same type as take where possible, and
neither take nor takeExactly check hasSlicing for infinite ranges (since
infinite ranges will soon be required to use them for slicing, and that
creates a circular dependency among those 3 templates
Some whitespace cleanup.
Adustments to hasSlicing.

Now, it enforces that opSlice returns a range which can be assigned to
the original range type (so that it can be assigned to the original
range as long as the original range isn't const) as long as it's finite,
and it enforces that opSlice's result is the result of take when the
range is infinite.
Fix to Map caused by changes to hasSlicing.

import std.algorithm;
import std.range;

void main()
{
    auto N2 = sequence!"n"(cast(size_t)1).map!"a";
}

ceased to compile, because Map's opSlice won't work anymore over
infinite ranges, because the result can't be reassigned to the original.
Add some requirements for opDollar to hasSlicing.

Ideally, opDollar would be outright required for any range with slicing,
but unless/until it's changed so that length automatically aliases to
opDollar when opDollar isn't defined (issue# 7177), that's probably not
a reasonable requirement to make.
Further strengthen hasSlicing.

The extra requirements are not currently enabled because of bug# 8847,
but they're now there, and they're listed as their in the documentation
so that no one will think that they're not supposed to apply.
Strengthened isRandomAccess with regards to $.

It now requires that indexing with $ result in the same type as front if
r[$] works, and if that works, and the range isn't infinite, r[$ - 1]
must be the same type as front. Ideally, we'd require that r[$] work
regardless, but without enhancement #7177 being implemented, that would
likely break too much code, as opDollar was only recently fixed and
probably isn't used much.
Removed incorrect @property attributes in std.range.

They were removed previously but reintroduced due to a bad rebase, so
I'm removing them again here.
fix Issue 8908 - Collapse of std.csv by the specifications change of std.conv.parse
fix Issue 9060 - std.range.chain and std.range.zip cannot get frame pointer

Changes to avoid following two errors:
* "cannot access frame pointer"
* "field xxx must be initialized in constructor, because it is nested struct"
Doc fix: an O(1) op was documented as O(log(n))

I thought it was odd that inserting an element at the front of a singly-linked-list would be an O(log(n)) operation.  Too expensive!  So I looked at the code and it does seem to be O(1).  I'm hoping this is just needing a documentation edit ;)
Merge pull request #1004 from 9rnsr/fix9060

Issue 9060 - std.range.chain and std.range.zip cannot get frame pointer
Merge pull request #1016 from chadjoan/patch-3

Doc fix: an O(1) op was documented as O(log(n))
Merge pull request #854 from jmdavis/hasSlicing

Improvements to hasSlicing
Merge pull request #1001 from 9rnsr/fix8908

Issue 8908 - Collapse of std.csv by the specifications change of std.conv.parse
Some updates to the changelog.
Fixed typos in changelog.