Began replacing the C++ `Group` class with a new one based on the changes made
to the Python version
Updated Dicyclic.cpp
Updated Dihedral.cpp
Updated Direct.cpp (now a template/.hpp file and untested)
Updated Symmetric.cpp
Updated Tabular.cpp
Got Direct.hpp to work
Renamed `operator()` back to `op` for ease of calling it on pointers
Gave Direct.hpp a constructor that takes references instead of pointers
Renamed `group` to `basic_group`
Merge branch 'master' into cpp2
Rewrote & combined Tabular.cpp and Element.cpp into a new `Group` class that
acts like `Tabular` and has a custom element type that can be multiplied etc.
C++: Added a "group_mismatch" exception
Gave Group.hpp optional membership checks in methods that take `Element`s
Fixed a compilation error
Renamed `basic_group<T>::op` to `oper` for consistency with Haskell & Python
Gave Group.hpp a `direct` method that operates only on `Group`s; also found &
fixed a bug in Dicyclic.cpp while I was at it
Added an `indexElem` method to basic_group<T>
Forgot to implement Group::indexElem
Added test programs for the various implementations of `indexElem`