FIX: <% if Link %> wasn't working

Since ViewableData was returning a casting helper for Link, but DataObject was
only using $this->$fieldname to set values on that casting helper, you could
not use <% if Link %> (or <% if $Link %>) in your templates because Link is not
a field, and thus had no value to be set on the casting helper, causing
hasValue to think that there was no value.  Since DataObject->dbObject says that
"it only matches fields and not methods", it seems safe to have it call db(..)
to get the field spec, and not call ViewableData->castingHelper at all.
Missing directory separators in output of suggested _ss_environment paths
MINOR: Fixed typo
Update cli-script.php

Use DIRECTORY_SEPARATOR for cross platform
Merge pull request #2124 from CheeseSucker/patch-4

MINOR: Fixed typo
BUG: Fix for Cookie expiry timeout being passed as a large number on 64 bit machines
FIX: ConfirmedPasswordField used to expose existing hash
BUG Fixed issue where file upload via the HTML Editor media dialogue would not prompt users to overwrite existing files
Merge pull request #2128 from hafriedlander/fix/hashleak

FIX: ConfirmedPasswordField used to expose existing hash
Update simple-contact-form.md
Merge pull request #2120 from ryanwachtl/patch-1

Missing directory separators in output of suggested _ss_environment paths
Merge pull request #2129 from tractorcow/3.1-htmleditor-mediaform-fixes

BUG Fixed issue in file upload via the HTML Editor media dialogue
Merge pull request #2127 from silverstripe-rebelalliance/cookietimestamp

BUG: Fix for Cookie expiry timeout being passed as a large number on 64 ...
Add a note on the unit of the Session.timeout.
Merge pull request #2132 from mateusz/note

Add a note on the unit of the Session.timeout.
MINOR: fix Email class modifying SSViewer.source_file_comments config val

The Email class was updating the SSViewer.source_file_comments value and not
resetting it. If someone had this value set to true in their system and then
used the Email class, it seems there would be an unintended side-effect of
having the source file comments turned off.
FIX: ViewableData::obj() would sometimes return an empty object

For instance, this happens when these criteria are met:
  1) No casting has been specified for a method in $casting.
  2) A template accesses the field without any casting
  3) Any casts by the template will now yield an empty object.

After a brief look at the commit history, it can seem like this bug is several years old, unless it is a side-effect of other changes in the code.

== Steps to reproduce ==
Add two methods to be accessed by a template. Make sure you do not define an entry in $casting for them:
	public function Testus() {
		return "Te<x>t1";
	}

	public function Testus2() {
		return "Te<x>t2";
	}

Add this to a template:
	<p>
		First access:<br />
		"$Testus" : "$Testus.XML"<br />
		"$Testus2.XML" : "$Testus2"<br />
	</p>
	<p>
		Second access:<br />
		"$Testus" : "$Testus.XML"<br />
		"$Testus2.XML" : "$Testus2"<br />
	</p>

Open the page in a browser, and you will get:
 First access:
"Tet1" : ""
"Te<x>t2" : "Tet2"

Second access:
"Tet1" : ""
"" : "Tet2"

We see that any cast can yield an empty string.
Unit test for bugfix in ViewableData::obj().
TEST: additional test for ViewableData not wrapping cached strings
Updated helplink to 3.1