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
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.
dump_database.py prints sytem properties now
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
change behavior of createdb

It will still raise an error if the database doesn't exist.  But now new
tables will still be added, and the database version will still be
checked even if createdb is False
add Database.get_properties()

which adds properties from a dictionary
system properties are added to database in BaseSystem

there is a new function get_system_properties which should return a
dictionary of properties.  These are added to the database automatically
in create_database.
check whether the database is a pele database before modifying
Merge pull request #10 from js850/dbproperty

add SystemProperty table to database