Error when multiple edges are sent to a Non-multi(di)graph

- make the error message clearer
- remove the usage of the (random) function choice
- test the error in both Graph and Digraph
Trac #16210: Bug in is_hamiltonian: wrong exceptions are caught

{{{
sage: g = graphs.CycleGraph(10)
sage: g.allow_loops(True)
sage: g.add_edge(0,0)
sage: g.is_hamiltonian()
False
}}}

This happens because in `traveling_salesman_problem` the call to
`_scream_is_not_simple` raises a `ValueError` when the graph is not
simple, and the same exception is raised when the graph is not
hamiltonian.

We can use the `EmptySetError` to differentiate them, as we cannot
optimize anything on an empty set.

Nathann

URL: http://trac.sagemath.org/16210
Reported by: ncohen
Ticket author(s): Nathann Cohen
Reviewer(s): Vincent Delecroix
Trac #16215: Error raised when non-multi(di)graph receive multiple edges as input

{{{
sage: Graph([(0,1),(0,1)],multiedges=False)
Traceback (most recent call last):
...
ValueError: Non-multigraph input dict has multiple edges (0,1)
sage: DiGraph([(0,1),(0,1)],multiedges=False)
Traceback (most recent call last):
...
NameError: global name 'choice' is not defined
}}}

The first message is much clearer `:-P`

Nathann

URL: http://trac.sagemath.org/16215
Reported by: ncohen
Ticket author(s): Vincent Delecroix
Reviewer(s): Nathann Cohen