Catch IOError in _read_knobfile

Return empty dictionary instead in case the file does not exist.
Merge branch 'matching'
Use open() function instead of file()

Compatible between python2 and python3
Use python3 style print function

This is possible from python2.6 using the statement:

    from __future__ import print_function

For python versions below, the import statement will fail. The code will
run nevertheless if the line is removed. The only difference is, that
multiple arguments of the print() function will now be output as tuples.
Use python3 style division

Python3 division yields floating point results in all cases by default.
If you want to perform integer division, you need to use the '//'
operator.

In the modified file, the intended operation was a floating point
division anyway.
Use python3 style explicit relative imports

In python3 implicit relative imports are deprecated. Python2.5 supports
python3's explicit relative import syntax only using:

    from __future__ import absolute_import

From python2.6 the syntax is available without this statement.
Fix issue with missing type basestring in python3
Fix pre-existing syntax problem