DenseVectorBase::empty(), const T & operator()

empty() adds a missing STL-like function.

Returning a reference in both const and non-const accessors lets us
easily pull out a valid T* for use in other APIs.
PetscVector<T>::insert specializations

If we have a whole N-vector of values to add, we can add them all with
1 PETSc call instead of N.
Refactor NumericVector::insert()

Add an insert() overload that takes const T* input; this now forms the
underlying implementation of several other overloads.

Move common insert() overloads into NumericVector rather than defining
them redundantly in subclasses; use a using declaration when necessary
to prevent this from leading to hidden overloads.

Make those less-raw overloads inline and non-virtual; particular
subclasses should find it sufficient to overload the T* method.
Merge pull request #411 from roystgnr/performance_tweaks

PetscVector::insert performance tweaks