Removed static temporaries for inner_prod() and norm_X() for CUDA and OpenCL backends.

These optimizations resulted in race conditions for a multithreaded setting.
The drawback now is higher 'launch' overhead in these routines.
Benchmarking required in order to quantify overhead and consider further steps (temporaries in context)
Fixed erroneous assert() in ichol0 preconditioner (issue only visible in debug builds)
Added tutorial on running multiple conjugate gradient instances on different OpenCL contexts.
Added missing linking statement for Boost.thread()
Started rewriting the autotuner
Several improvements in the generator

double precision support on scalar reduction
improved temporary handling on scalar reduction
restored autotuning procedure
Fixed BLAS2 autotuning
Fixed BLAS3 autotuning

Also contains minor renaming in BLAS1
benchmark-utils.hpp is not duplicated in viennacl/tools/timer.hpp
Fixed most -Wextra warnings on Clang 3.0 and GCC 4.6.
* Support generic Python scalar types

* Reorganise result_* functions -- now properties of the Node class

* Generalise the result_size stuff to determine the maximum size for an
  object to hold the result of any expression -- this is, in many cases,
  bound to produce a size far in excess of what is needed. More intelligent
  logic, in the various operation classes, is needed to produce a correct
  result_size.

* Notably, the speed of the module right now is substantially slower than
  desired: probably as a result of the pure Python wrapper code, but a
  comparison with a numpy benchmark shows the even the _viennacl code has
  a long way to go.

* TODO: logging; code clean-up and comments
Merge remote-tracking branch 'upstream/master' into pyviennacl
* Use map instead of for loop where possible
* Disable OpenCL for profiling
  + don't want kernel launch overhead!
  + early results suggest rewriting in C++ will be necessary for performance