SF patch #1438387, PEP 328: relative and absolute imports.

 - IMPORT_NAME takes an extra argument from the stack: the relativeness of
   the import. Only passed to __import__ when it's not -1.

 - __import__() takes an optional 5th argument for the same thing; it
   __defaults to -1 (old semantics: try relative, then absolute)

 - 'from . import name' imports name (be it module or regular attribute)
   from the current module's *package*. Likewise, 'from .module import name'
   will import name from a sibling to the current module.

 - Importing from outside a package is not allowed; 'from . import sys' in a
   toplevel module will not work, nor will 'from .. import sys' in a
   (single-level) package.

 - 'from __future__ import absolute_import' will turn on the new semantics
   for import and from-import: imports will be absolute, except for
   from-import with dots.

Includes tests for regular imports and importhooks, parser changes and a
NEWS item, but no compiler-package changes or documentation changes.
diff --git a/Python/compile.c b/Python/compile.c
index 9705ce4..78ae6a7 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2452,10 +2452,22 @@
 	   XXX Perhaps change the representation to make this case simpler?
 	 */
 	int i, n = asdl_seq_LEN(s->v.Import.names);
+
 	for (i = 0; i < n; i++) {
 		alias_ty alias = asdl_seq_GET(s->v.Import.names, i);
 		int r;
+		PyObject *level;
 
+		if (c->c_flags && (c->c_flags->cf_flags & CO_FUTURE_ABSIMPORT))
+			level = PyInt_FromLong(0);
+		else
+			level = PyInt_FromLong(-1);
+
+		if (level == NULL)
+			return 0;
+
+		ADDOP_O(c, LOAD_CONST, level, consts);
+		Py_DECREF(level);
 		ADDOP_O(c, LOAD_CONST, Py_None, consts);
 		ADDOP_NAME(c, IMPORT_NAME, alias->name, names);
 
@@ -2488,9 +2500,22 @@
 	int i, n = asdl_seq_LEN(s->v.ImportFrom.names);
 
 	PyObject *names = PyTuple_New(n);
+	PyObject *level;
+	
 	if (!names)
 		return 0;
 
+	if (s->v.ImportFrom.level == 0 && c->c_flags &&
+	    !(c->c_flags->cf_flags & CO_FUTURE_ABSIMPORT))
+		level = PyInt_FromLong(-1);
+	else
+		level = PyInt_FromLong(s->v.ImportFrom.level);
+
+	if (!level) {
+		Py_DECREF(names);
+		return 0;
+	}
+
 	/* build up the names */
 	for (i = 0; i < n; i++) {
 		alias_ty alias = asdl_seq_GET(s->v.ImportFrom.names, i);
@@ -2509,6 +2534,8 @@
 		}
 	}
 
+	ADDOP_O(c, LOAD_CONST, level, consts);
+	Py_DECREF(level);
 	ADDOP_O(c, LOAD_CONST, names, consts);
 	Py_DECREF(names);
 	ADDOP_NAME(c, IMPORT_NAME, s->v.ImportFrom.module, names);