Is the language of words with as many a's in the first as b's in the second part context-free?
Yes, the language is context-free.

Let $w$ be a word in $\{a,b\}^*$. Decompose it as $w = u v$ where $|u| = N_b(w)$.
$$ \begin{align}
  N_a(u) &amp;= N_a(w) - N_a(v) &amp;&amp; \text{because \(w = u v\)} \\
         &amp;= N_a(w) - (|v| - N_b(v)) &amp;&amp; \text{because \(v \in \{a,b\}^*\)} \\
         &amp;= N_a(w) - |w| + |u| + N_b(v) &amp;&amp; \text{because \(|v| = |w| - |u|\)} \\
         &amp;= |u| - N_b(w) + N_b(v) = N_b(v) \\
\end{align} $$
Thus we can decompose any word in the desired form: $L = \{a,b\}^*$. Constructing a PDA is left as an exercise to the reader.

This still works if the language contains other letters, by the way, but you have to take a prefix of $w$ that contains $N_b(w)$ letters in $\{a,b\}$ and arbitrarily many other letters.

Another way to see this is to notice that if there is an $a$ in $u$ and a $b$ in $v$, then you can swap the two letters, which results in a word that has the same balance $N_a(u) - N_b(v)$. $L$ is the set of words whose balance is zero for some split position. Iterate this decomposition until it becomes impossible: either $u$ contains no $a$ or $v$ contains no $b$. If we choose the split position so that $|u| = N_b(w)$ and $|v| = N_a(w)$, then now $u$ contains all the $b$'s and $v$ contains all the $a$'s: $N_a(u) = 0$ and $N_b(v) = 0$, and in particular the balance is 0.