As a followup to #23, it would be helpful to be able to specialize default_algorithm/select_algorithm on the matrix type in addition to specializing it on the instance.
An application of this is block sparse matrices, where we might want to determine the default algorithm based on the block type (as opposed to actually grabbing an instance of a block, which is finicky and doesn't work in the limit where there aren't any blocks).