Relation between the dual space, transpose matrices and rank-nullity theorem Summing up, how can one use linear functionals, transpose matrices, row and column rank equality and annihilators to prove the rank-nullity theorem?

While studying linear algebra, I'm trying to get the precise relation between the following concepts: given two vector spaces $V$ and $W$, I can form the dual spaces $V^*$ and $W^*$ by taking all the linear functionals on $V$ and $W$. The basis of each one of those spaces lifts to the duals (though this demonstration I'm still going to carry on, but I have the idea how to do so). If I have a linear transformation $T: V \to W$, I have a natural way of defining a transformation $T^*: W^* \to V^*$, by composition: given a functional $g \in W^*$, I define $f \in V^*$ by:
$$f(\alpha) = g(T\alpha)$$
This way of defining $T^*$ is familiar to me, as it is similar a construction commonly done on modules over a ring $R$. Now, if I represent $T$ as a matrix on a choice of basis for $V$ and $W$, and $T^*$ as the matrix on the basis given by the lifting, then $T^*$ will be the transpose of $T$ (the exchange of rows and columns of $T$). I don't see clearly why this happens. Furthermore, the rank of $T$ is equal to the rank of $T^*$, what proves that the column rank of a matrix equals it's row rank. Given that the rank is the dimension of the image subspace, I think that this can be show by carrying out the image of $V$ on $W$ to the duals.
I also read that there is a relation between the duals and the kernel of a linear transformation (the annihilator (?)), but that isn't very clear to me either. Using that and the facts above, one can prove the rank-nullity theorem. The reason I'm asking this is that I was given a proof of the rank-nullity theorem without using the linear functionals, and that seemed to depend only on $T$ having the same row and column rank (which was proved by smart manipulation of some equations on vectors). That proof didn't gave me a satisfactory intuition on the rank-nullity theorem, specially when $V \neq W$. I believe that the proof through linear functionals will be more enlightening.
EDIT: I was following the treatment given on Hoffman's Linear Algebra, chapters 3.5 through 3.7 (linear functionals, annihilators and transposes), if that's of interest.
 A: The proof that my professor used in her notes for the rank-nullity theorem didn't use either matrix representations or linear functionals.
For a linear transformation $T: V \rightarrow W$, take a basis for the kernel and add-on vectors to extend it to a basis for $V$. Because it is a basis for $V$, you can express any vector in $V$ as a linear combination of the basis vectors. 
Additionally, for any $w \in Range(T)$, $w = T(v)$ for some $v \in V$, so you know that the range of $T$ can be expressed as a linear combination of the images of basis vectors (because $T(\sum c_iv_i) = \sum c_iT(v_i)$).  
By applying $T$ to an arbitrary vector in $V$ expressed as a linear combination of the extended basis of the kernel, you can find that any vector in the range of $T$ has a zero projection towards any of the basis vectors of the kernel because they are sent to zero. You can then prove that the rest of the basis is a basis for the range, because if its image is linearly dependent, it implies that you have a linear combination of those vectors which is sent to zero, which would mean that it was in the span of the basis for the kernel, which is contradictory.
I gave an outline of the proof, so maybe you could toy with the idea yourself, but if you're stumped, I can go ahead and write down the rigorous version.

On the transpose: Before I say anything, a crucial fact to remember is that fields are also vector spaces. Because functionals are mappings from a Vector Space to its underlying field, they are too linear transformations and representable as $Dim(\mathbb{K}) \times Dim(V) $ matrices.
One way of thinking about the transpose is by examining the matrix representations of the functional, matrix, and vector:
$$\begin{bmatrix}
l_1 && ... && l_n
\end{bmatrix}
\begin{bmatrix}
a_{11} && ... && ... && a_{1n} \\
\vdots && a_{22} && && \vdots \\
\vdots && && \ddots && \vdots \\
a_{n1} && ... && && a_{nn}
\end{bmatrix} \begin{bmatrix}
v_1 \\
 \vdots \\
v_n
\end{bmatrix} $$
The transpose is the linear operator $T^*$ such that $l_w(T(v)) = (T^*(l_w))(v) $. In order to accomplish that in the representation above, all you really have to do is have $A$ act on $l$ first, or left multiply first. However, linear transformations are a lot less ambiguous than matrices and don't really like this "left multiply" stuff, so you have to define a new linear transformation which treats your functional like a normal vector, and whose matrix representation right multiplies with it like a normal matrix representation. So, if you define the new mapping $T^*$ and then take its matrix representation, you get:
$$
\begin{bmatrix}
a_{11} && ... && ... && a_{n1} \\
\vdots && a_{22} && && \vdots \\
\vdots && && \ddots && \vdots \\
a_{1n} && ... && && a_{nn}
\end{bmatrix} \begin{bmatrix}
l_1 \\
 \vdots \\
l_n
\end{bmatrix}  $$
Which gives you your new linear functional $T(l_w) $, call $j$:
\begin{bmatrix}
j_1 \\
 \vdots \\
j_n
\end{bmatrix}
But because $T$ still mapped it to a functional, when you apply it and take $j(v)$, if you take its matrix representation as a linear transformation/functional, you go back to:
$$ \begin{bmatrix}
j_1 && ... && j_n
\end{bmatrix} \begin{bmatrix}
v_1 \\
 \vdots \\
v_n
\end{bmatrix} $$
The confusion and ambiguity here really come from the imprecision of matrices themselves. Once the idea of everything being a matrix is embedded in your mind, it's challenging to decontextualize them and think more malleably in how they can be applied. The same matrix representation can mean different things, and different matrix representations can mean the same things (as shown above) depending on the type of vector space they're representing.
A: Let $(v_1,\dots,v_n)$ be a basis for $V$, and form a dual basis $(v_1^*,\dots,v_n^*)$ for $V^*$. Similarly let $(w_1,\dots,w_m)$ be a basis for $W$, and form a dual basis $(w_1^*,\dots,w_m^*)$ for $W^*$. Suppose  $Tv_j=\sum_{i=1}^ma_{ij}w_i$, so that the matrix for $T$ with respect to these bases is $[a_{ij}]$. Then
\begin{align*}
(T^*w_j^*)\left(\sum_{i=1}^n b_iv_i\right)&=w_j^*\left(T\sum_{i=1}^n b_iv_i\right)\\&=w_j^*\left(\sum_{i=1}^nb_iTv_i\right)\\&=w_j^*\left(\sum_{i=1}^nb_i\sum_{k=1}^ma_{ki}w_k\right)\\&=\sum_{i=1}^n\sum_{k=1}^mb_ia_{ki}w_j^*(w_k)\\&=\sum_{i=1}^n\sum_{k=1}^mb_ia_{ki}\delta(k=j)\\&=\sum_{i=1}^nb_ia_{ji}\\&=\sum_{i=1}^na_{ji}v_i^*\left(\sum_{r=1}^nb_rv_r\right)
\end{align*}
and so $T^*w_j^*=\sum_{i=1}^na_{ji}v_i^*$. Hence, the matrix representing $T^*$ with respect to these bases is $[a_{ji}]$, the transpose of the matrix for $T$.
The relationship between the dual map and the kernel of $T$ is that $T^*(W^*)$ is the annihilator of $\ker(T)$. Since $(V/U)^*\cong\text{Ann}(U)$ for any subspace $U\subset V$, in particular we have
$$
T^*(W^*)=\text{Ann}(\ker(T))\cong (V/\ker(T))^*
$$
so that $\dim(\text{range}(T^*))=\dim(V)-\dim(\ker(T))=\dim(\text{range}(T))$ by the rank-nullity theorem, proving that the rank of a matrix is invariant under transposition. You might also find a different way to prove that $\dim(\text{range}(T^*))=\dim(\text{range}(T))$, and from this deduce the rank-nullity theorem.
As an aside, you can prove the rank-nullity theorem very easily by the first isomorphism theorem, which tells you that $\text{range}(T)\cong V/\ker(T)$. Comparing dimensions on both sides of the isomorphism yields
$$
\dim(\text{range}(T))=\dim(V/\ker(T))=\dim(V)-\dim(\ker(T)).
$$
