Spaces are wrapped via a boost::variant

This approach seems to be somewhat simpler. It should also make it easier to
wrap shared_ptr[T] and shared_ptr[const T] instances without sacrificing const
correctness.

Added some functionality to Space wrappers to showcase new variant
implementation.
Add template type as trait to Space
Re-implement Boundary operator wrapper

Now uses a boost::variant. This is a safer way to deal with the multiple types
that (with respect to basis and result type) the operators can have. Basically,
static polymorphism is dealt with at the C++ level, rather than via casting in
cython. Compiling is slower (template instantiation), but compute should be
quite similar, if not faster.
Add comparison operator to spaces
Re-implement context wrappers

Context now uses new boost::variant spaces and boundary operators.
Added +-*/ to boundary operators
Merge pull request #164 from bempp/rsdt/cython_reops

Rsdt/cython reops