AVX vectorized Laplace kernel, other optimizations

- Add template wrappers for vector intrinsics. This lets us write
  maintainable and general vectorized code for AVX, SSE.

- kernel.txx: Add a generic kernel function to re-arrange data for
  vectorization. Takes a kernel function as template parameter. After
  re-arranging input data, this kernel is called and then the result is
  again re-arranged to the output format.

- Add new vectorized Laplace kernel function using templates for float
  and doubles with AVX, SSE or without vectorization. Supports variable
  number of Newton iterations for rsqrt, for the desired accuracy.

- fmm_ptr.txx: Optimize CollectNodeData(...).

- interac_list.txx: Modify BuildList(...) to not return the interaction
  list. Instead the interac_list of the node is updated.

- fmm_node.hpp: Change interac_list to pvfmm::Vector instead for
  std::vector.

- fmm_tree.txx: Add OpenMP parallelism to ClearFMMData() and update
  BuildInteracLists(). The interaction list data is not owned by the
  node anymore. The FMM_Tree allocates the memory during setup.

- Update example1.cpp to allow modification to single precision case.