How can I add vertices to intersection of two edges?
If all you really want is to add a vertex at the position of intersection, then something like this script would work: (this even adds the vertex at the  projected intersection of two lines, or the closest point if they never intersect)

import bmesh
import bpy
from mathutils import geometry

def add_vertex_to_intersection():

    obj = bpy.context.object
    me = obj.data
    bm = bmesh.from_edit_mesh(me)

    edges = [e for e in bm.edges if e.select]

    if len(edges) == 2:
        [[v1, v2], [v3, v4]] = [[v.co for v in e.verts] for e in edges]

        iv = geometry.intersect_line_line(v1, v2, v3, v4)
        iv = (iv[0] + iv[1]) / 2
        bm.verts.new(iv)
        bmesh.update_edit_mesh(me)

add_vertex_to_intersection()


this does not attach the vertex to any edges/faces. Here it is packaged as an addon accessible from: W > Place vertex at intersection



This is now part of mesh_tinyCAD

A while back I added this feature to mesh_tinyCAD, and called it (Vertex to Intersection) V2X. I use it to add guide-vertices to intersections and it is less potentially destructive than the XALL or VTX operations.