Refs #166: fix to a previous commit - some asserts were too strict.
Also added an explicit swap_array<T [&a], N>() template for swapping arrays. Just in case compiler does not have it.