transpose matrix returned by findrotation_kabsch

to make it consistent with findrotation_kearsley.  Actually they're not
totally consistent because findrotation_kearsley returns the distance as
well. Eventually we should make these two fully consistent
add a new table SystemProperty to the database

this is for storing system wide properties like natoms, potential
parameters, etc
set the database version to 2

update migrate_db.py
remove the Distance table from the database

update _distance graph, the only place this was really used.

TODO: migrate the database to a new version

TODO: remove any other mension of the table in the repository
remove mention of database distances from repository
change schema version of database to 3

update migrate_db.py
LJCluster sets some system properties in create_database()

also BLJCluster
use abstract methods in optimizer base class

use syntax

virtual void run() = 0;

rather than

virtual void run() { throw runtime_error("not implemented"); }
reimplement Database.add_property()

the value type is determined automatically unless specified
set database version back to 1

and revert migrate_db back to before these database updates occurred.
Since these changes only add to, or delete from, the existing database
without modifying the existing tables the database does not need to be
manually updated (migrated).  sqlalchemy will add the new table
SystemParameters automatically, and ignore the (now deleted) table
Distance, if it already exists.
add a assignment operator to Array.h

operator=(Array x) copies the data into the this->_data.  It will resize
the data if it is the sole owner, otherwise throw an exception.
turn off debug printing in array.h
Array operator= now will only resize if _data==NULL
dump_database.py prints sytem properties now
Merge pull request #11 from js850/array_problem

define assignment operator in Array
Revert "Merge pull request #11 from js850/array_problem"

This reverts commit a0734bd6e93344ab30cc4bb61dbe0f66262c1e70, reversing
changes made to b3b09c9d0fd5449b1598f9d198dde6f6b81324fa.
Revert "Revert "Merge pull request #11 from js850/array_problem""

This reverts commit c545caecb285d4e947746bf6fa1e699bcd840714.

add back in the changes from the pull request.  The bug fix will be in
the next commits
change array assignment operator to wrap the array

This is necessary because of the way cython behaves.  Cython tries to
wrap every single statement in try, catch clauses, even when that means
they have to create an explicit temporary named variable.  The following
cython code:

   cdef _pele.Array atomsA = _pele.Array ( atomsAnp.data, atomsAnp.size)
   cdef _pele.Array atomsB = _pele.Array ( atomsBnp.data, atomsBnp.size)

Gets translated into the following c++ code (with some simplifications)

   Array temp_array, atomsA, atomsB;
   try {
       temp_array = pele::Array(__pyx_v_atomsAnp->data, __pyx_v_atomsBnp->size);
   } catch(...) {
     ...
   }
   atomsA = temp_array;

   try {
       temp_array = pele::Array(__pyx_v_atomsBnp->data, __pyx_v_atomsBnp->size);
   } catch(...) {
     ...
   }
   atomsB = temp_array;

This means that temp_array is assigned first to atomsA then to atomsB.
The assignent operator must be general, and it shouldn't be
computationally intensive (i.e. it shouldn't copy the whole array).
Merge pull request #12 from js850/array_master

add assignment operator (operator=) to Array class
change lbfgs to using Arrays instead of vectors