Factored out mode-specific code in separate modules

This patch is purely for internal refactoring.
The external API does not change.
Performance is not affected.

The objective is to increase readability by
isolating all logic relevant for a cipher mode
in a single module. For instance, all logic
about SIV is contained in mode_siv.py only.

In other words, this patch breaks up (and gets
rid of) blockalgo.py, which has slowly grown
too big, complex, and full of switch statements.

For consistency, modules have been created also
for simpler modes like ECB and CBC, because
it is still useful to isolate mode-specific
documentation.