Bug 975996:  Add _PyTime_DoubleToTimet to C API
New include file timefuncs.h exports private API function
_PyTime_DoubleToTimet() from timemodule.c.  timemodule should export
some other functions too (look for painful bits in datetimemodule.c).

Added insane-argument checking to datetime's assorted fromtimestamp()
and utcfromtimestamp() methods.  Added insane-argument tests of these
to test_datetime, and insane-argument tests for ctime(), localtime()
and gmtime() to test_time.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 0783f7f..f855796 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -3,6 +3,7 @@
 
 #include "Python.h"
 #include "structseq.h"
+#include "timefuncs.h"
 
 #include <ctype.h>
 
@@ -84,11 +85,8 @@
 /* For Y2K check */
 static PyObject *moddict;
 
-/* Cast double x to time_t, but raise ValueError if x is too large
- * to fit in a time_t.  ValueError is set on return iff the return
- * value is (time_t)-1 and PyErr_Occurred().
- */
-static time_t
+/* Exposed in timefuncs.h. */
+time_t
 _PyTime_DoubleToTimet(double x)
 {
 	time_t result;
@@ -382,7 +380,7 @@
         /* Checks added to make sure strftime() does not crash Python by
             indexing blindly into some array for a textual representation
             by some bad index (fixes bug #897625).
-        
+
             No check for year since handled in gettmarg().
         */
         if (buf.tm_mon < 0 || buf.tm_mon > 11) {
@@ -583,7 +581,7 @@
 	/* Reset timezone, altzone, daylight and tzname */
 	inittimezone(m);
 	Py_DECREF(m);
-	
+
 	Py_INCREF(Py_None);
 	return Py_None;
 }