Algorithm to find Jordan form

To get an algorithm for Jordan form, you mostly just follow the proof,
which is constructive.
Indeed, the proof of Jordan form is essentially the proof that this
algorithm works

Guide: 
1: theoretical results
    gen. eigenspace decomposition
    struct of nilpotent operators [icky part]
2: algorithm background
   [stuff you should already be able to do]
   
   find basis for kernel
   find basis for -compliment-/extend basis
   [a concrete way: find basis for -perp-]
3: split into gen. eigenspaces,
   actually find basis for -flag-
   pick bases for compliments, push forward, tada!
