In my opinion, `SerialVectorMatrixBuilder` class should provide not only types of global vector and matrix but also types of assembly executors, i.e. `serialExecute()` should be defined here as `ExecutorType`. Having that type declaration, we can easily switch between different parallelization schemes, i.e. `SerialVectorMatrixBuilder` class or other class such as `OpenMPVectorMatrixBuilder` can be specified as template parameters for numerical algorithms.